我正在使用 WSAWaitforMultipleEvents() 函数,并且我认为这使我的套接字非阻塞,即 recvfrom() 仅在生成 FD_READ 事件并且套接字上可以读取数据时才调用。所以,我的 recvfrom() 不会阻塞调用。
我使套接字非阻塞的方法正确吗?因为现在我觉得我的程序仍然在阻塞等待事件,所以它看起来并不是真正的非阻塞。我正在添加一段代码以寻求帮助。
提前致谢 :)
while(1)
{
waitRet = WSAWaitForMultipleEvents(1, &hEvent, FALSE, INFINITE, FALSE);
if(WSAEnumNetworkEvents(newSocketIdentifier,hEvent,&events) == SOCKET_ERROR)
{
"FAILURE"
continue;
}
else
{ //else event occurred
if(events.lNetworkEvents & FD_READ)
{
//FD_READ
if((recv_len = recvfrom(newSocketIdentifier, receiveBuffer, sizeof(receiveBuffer), 0, (struct sockaddr *) &clientSocket, &clientSocketLength)) == SOCKET_ERROR)
{
//error in recvfrom
}
else
{
//recvfrom() succeeded
}
}
}
}