サーバー側では、readfds で select() を実行しているときに、不正なファイル記述子エラーが返されます。fdset で無効になった fd を見つけるにはどうすればよいですか?
1685 次
2 に答える
1
通常、反対側の接続が閉じられるか、RST セグメントが送信されると、selectは戻り、対応する記述子を読み取り準備完了としてマークします。その後、それらからread/を実行recvすると、エラーまたは EOF が返されます。
straceデバッグ用のツール (利用可能な場合) を使用することもできます。selectどの記述子が供給され、どの記述子が呼び出されたreadかを追跡するのに役立ちます。recv
于 2012-09-26T13:03:01.953 に答える
0
次の関数を使用して、ソケットの保留中のエラーを確認できます。
int get_socket_error( int s ) {
int error;
socklen_t len = sizeof( error );
if ( getsockopt( s, SOL_SOCKET, SO_ERROR, &error, &len ) < 0 )
error = errno;
return error;
}
しかし、@Maximが言っているように、EBADFから戻ってきたのselect(2)は通常、ずさんなコーディングの兆候です。
于 2012-09-26T13:25:37.033 に答える