私は 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
}
}
}
}