windows TCP 套接字错误 10045
windows tcp socket error 10045
我正在尝试创建一个服务器客户端,以便我可以更好地了解它们的工作方式,但是我遇到了一个问题,每当我进行 listen()
调用时 windows 给出我遇到了代码 10045 的错误,我查了一下,似乎是因为不支持该操作,但是我很困惑为什么会发生这种情况,因为据我了解 listen()
调用应该可以继续TCP套接字。这是我如何初始化套接字的源代码
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
int sockfd, n;
struct addrinfo hints, *servinfo;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_protocol = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
if((n = getaddrinfo(NULL, argv[1], &hints, &servinfo)) != 0){
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(n));
return EXIT_FAILURE;
}
if((sockfd = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) < 0){
fprintf(stderr, "%d\n", WSAGetLastError());
perror("socket");
return EXIT_FAILURE;
}
if((n = bind(sockfd, servinfo->ai_addr, servinfo->ai_addrlen)) == -1){
fprintf(stderr, "%d\n", WSAGetLastError());
perror("bind");
return EXIT_FAILURE;
}
if(listen(sockfd, 1) == -1){ //error
fprintf(stderr, "%d\n", WSAGetLastError());
perror("listen");
return EXIT_FAILURE;
}
你设置错误protocol/socket类型:
hints.ai_protocol = SOCK_STREAM;
如果您阅读 the addrinfo
structure reference 套接字类型应在 ai_socktype
字段中:
hints.ai_socktype = SOCK_STREAM;
由于您设置了错误的 ai_protocol
,socket
调用将为您创建错误类型的套接字,并且 listen
调用将失败。
这里的教训是始终阅读文档。
我正在尝试创建一个服务器客户端,以便我可以更好地了解它们的工作方式,但是我遇到了一个问题,每当我进行 listen()
调用时 windows 给出我遇到了代码 10045 的错误,我查了一下,似乎是因为不支持该操作,但是我很困惑为什么会发生这种情况,因为据我了解 listen()
调用应该可以继续TCP套接字。这是我如何初始化套接字的源代码
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
int sockfd, n;
struct addrinfo hints, *servinfo;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_protocol = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
if((n = getaddrinfo(NULL, argv[1], &hints, &servinfo)) != 0){
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(n));
return EXIT_FAILURE;
}
if((sockfd = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) < 0){
fprintf(stderr, "%d\n", WSAGetLastError());
perror("socket");
return EXIT_FAILURE;
}
if((n = bind(sockfd, servinfo->ai_addr, servinfo->ai_addrlen)) == -1){
fprintf(stderr, "%d\n", WSAGetLastError());
perror("bind");
return EXIT_FAILURE;
}
if(listen(sockfd, 1) == -1){ //error
fprintf(stderr, "%d\n", WSAGetLastError());
perror("listen");
return EXIT_FAILURE;
}
你设置错误protocol/socket类型:
hints.ai_protocol = SOCK_STREAM;
如果您阅读 the addrinfo
structure reference 套接字类型应在 ai_socktype
字段中:
hints.ai_socktype = SOCK_STREAM;
由于您设置了错误的 ai_protocol
,socket
调用将为您创建错误类型的套接字,并且 listen
调用将失败。
这里的教训是始终阅读文档。