在服务器端,在 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 回答