ネットワーク コードを Windows から Linux に移植していますが、問題がないわけではありません。何らかの理由で、ソケットをノンブロッキングに設定すると、recvfrom が正しく機能しません。ご覧のとおり、recvfrom を呼び出した後、errno は常に EAGAIN であり、受信したパケットの数に関係なく、常に EAGAIN です。ソケットをブロックしないように設定しているコードをコメントアウトすると、コードは正常に実行されます。さて、それは機能していますが、ブロックしています...
ソケットをノンブロッキングに設定するために使用しているコードは次のとおりです。
int nonBlocking = 1;
if ( fcntl( handle, F_SETFL, O_NONBLOCK, nonBlocking ) == -1 )
{
std::cout << "failed to set non-blocking socket" << std::endl;
return false;
}
私が間違っていることについてのアイデアはありますか?(私の Windows ビルドでは、以下を使用して正常に動作しています。
DWORD nonBlocking = 1;
ioctlsocket( handle, FIONBIO, &nonBlocking );