我有一段相当简单的C代码,它应该在Windows下创建一个非阻塞套接字:
int iResult;
u_long iMode = 1;
WORD wVersionRequested = MAKEWORD(1,1);
WSADATA wsaData;
WSAStartup(wVersionRequested, &wsaData);
client_s = socket(AF_INET, SOCK_DGRAM, 0);
if (client_s == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return -1;
}
iResult = ioctlsocket(client_s, FIONBIO, &iMode);
if (iResult != NO_ERROR){
printf("ioctlsocket failed with error: %ld\n",WSAGetLastError());
}
但是,它总是返回错误代码10045,这意味着对套接字的操作不受支持。 ioctlsocket()
的可能错误中没有描述它,因为我理解与接收过程更密切相关。
我已经检查了WSAStartup()
引发的错误,但在此之前一切正常。
client_s
被正确定义为套接字,所以我真的没有看到失败的地方。