gpt4 book ai didi

使用 WSAWaitforMultipleEvents() 的非阻塞套接字函数的概念

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:54 25 4
gpt4 key购买 nike

我正在使用 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
}
}
}
}

最佳答案

您可以通过使用(recvfrom() 将不会阻塞)使其句柄非阻塞,以更简单的方式使套接字非阻塞:

ioctlsocket(<socket handle>, FIONBIO, <make it non-zero to enable non-blocking>)

关于使用 WSAWaitforMultipleEvents() 的非阻塞套接字函数的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17058224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com