对于 TCP 阻塞套接字,调用是否安全:
if(SOCKET_ERROR != recv(s, NULL, 0, 0))
//...
检测错误?
我以为是安全的,然后我在电脑上有一个情况就是卡在这个语句上。 (如果重要的话,使用 ssl 套接字)。我还尝试传入带有指定缓冲区的 MSG_PEEK 标志,但我也遇到了问题。
有什么选择?
最佳答案
除了其他答案 - 这里有一个方便的小函数来获取挂起的套接字错误:
/* Retrives pending socket error. */
int get_socket_error( int sockfd )
{
int error;
socklen_t len( sizeof( error ));
if ( getsockopt( sockfd, SOL_SOCKET, SO_ERROR, &error, &len ) < 0 )
error = errno;
return error;
}
关于c++ - recv 传入 0 以检测套接字错误是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1103385/