在readfds上执行select()时服务器端返回错误的文件描述符错误。如何在fdset中找到哪个fd变为无效?
答案 0 :(得分:1)
通常,当关闭另一侧的连接或发送RST段时,select
返回并将相应的描述符标记为可供读取。当您随后从中执行read
/ recv
时,会返回错误或EOF。
您也可以尝试使用strace
工具(如果可用)进行调试。它将帮助您跟踪向select
提供的描述符以及调用的read
/ recv
描述符。
答案 1 :(得分: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所说,从select(2)
返回EBADF
通常表示编码草率不足,