c++ - recv 传入 0 以检测套接字错误是否安全?

标签 c++ sockets

对于 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/

相关文章:

c++ - 如果我声明一个模板函数,模板会在运行时自动创建不同版本的函数吗??

java - 使用android手机发送TCP命令但没有发送数据

c++ - HTTP套接字编程

python-2.7 - Python 2.7 : socket. 错误error [Errno 111] - 连接被拒绝

php - 找不到套接字传输 “tls”-在配置PHP时是否忘记启用它?)

c++ - 设置 subchild 在我展开它们时不在 qtreewidget 中缩进

html - 在 C++ 应用程序中嵌入 WebKit

c++ - 使用 'new'创建实例后出现堆栈溢出错误

c++ - 在我自己的命名空间中定义 size_t 会产生歧义或其他错误吗?

c# - 编程P2P应用程序