如何在fdset中找到哪个套接字描述符无效

时间:2012-09-26 12:52:20

标签: sockets select

在readfds上执行select()时服务器端返回错误的文件描述符错误。如何在fdset中找到哪个fd变为无效?

2 个答案:

答案 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通常表示编码草率不足,