[英]is it safe to recv passing in 0 to detect a socket error?
对于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;
}
你确实说你使用的是阻塞套接字,但你应该使用select(即使你在select调用之前将其设置为unblocking)。 它允许您轮询文件描述符并查看是否有数据等待,或者是否有错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.