サーバー側では、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 に答える