ioctlsocket()以10045失败

时间:2017-05-31 11:02:03

标签: c windows sockets blocking nonblocking

我有一段相当简单的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被正确定义为套接字,所以我真的没有看到失败的地方。

0 个答案:

没有答案