【发布时间】:2017-11-19 09:40:43
【问题描述】:
我是服务器开发的新手。并为新手问题和我糟糕的英语感到抱歉。 我正在尝试创建一个简单的基于服务器的 MSDN 示例。我不知道在哪里可以获取有关 ms 套接字的信息。这是我的代码
#define _WIN32_WINNT 0x501
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")
#define DEFAULT_PORT "2343"
#define DEFAULT_BUFLEN 512
int main() {
char recvbuf[DEFAULT_BUFLEN];
int iResult, iSendResult;
int recvbuflen = DEFAULT_BUFLEN;
struct addrinfo *result = nullptr, *ptr = nullptr, hints;
WSADATA wsaData;
iResult = WSAStartup(MAKEWORD(2,2),&wsaData);
if (iResult != 0 ){
std:: cout << "WSAStartup failed: \n" << iResult;
return 1;
}
memset(&hints, 0 , sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
iResult = getaddrinfo(NULL,DEFAULT_PORT,&hints,&result);
if(iResult !=0){
std:: cout << "getaddrinfo failed: \n" << iResult;
//WSACleanup();
return 1;
}
SOCKET ListenSock = INVALID_SOCKET;
ListenSock = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if(ListenSock = INVALID_SOCKET){
std:: cout << "Error at socket \n" << WSAGetLastError() << std::endl;
freeaddrinfo(result);
//WSACleanup();
}
iResult = bind(ListenSock,result -> ai_addr, (int)result -> ai_addrlen);
if (iResult == SOCKET_ERROR){
std:: cout << "bind failed \n" << WSAGetLastError() << std::endl;
//I got a error : Signal: SIGSEGV (Segmentation fault) - here
freeaddrinfo(result);
closesocket(ListenSock);
//WSACleanup();
}
freeaddrinfo(result);
我想知道如何解决它,如果你能帮助我,非常感谢你。
【问题讨论】:
-
使用调试器。失败时退出或返回。
-
是的。谢谢)