c++ - 在 linux 中调用 socket.close 后 socket.read_some 需要很长时间才能返回

标签 c++ linux sockets tcp boost-asio

我将 Boost.Asio 用作简单的套接字库。

当我打开一个套接字时,我创建了一个线程,该线程不断读取该套接字,并在套接字关闭或发生其他一些错误时返回。

while((read = socket->read_some(buf, ec)) != 0) {
    // deal with bytes read
}

此代码在 Windows 和 Mac 上运行良好。然而,对于 Linux,当从主线程关闭套接字时,socket::read_some 需要很长时间才能返回 - 我发现它超过 2 分钟。

我可以做些什么来改进它吗?

最佳答案

如果你愿意cancel-ability , 使用异步套接字。不要使用同步方法,例如 read_some。这已经在 asio-users 邮件列表上进行了无限次讨论。还有一个 ticket在 boost bug tracker 上讨论它。

另见 my answer类似的问题。

关于c++ - 在 linux 中调用 socket.close 后 socket.read_some 需要很长时间才能返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944797/

相关文章:

linux - 如何使用 sed 只提取日期?

C++一次替换字符串中的多个字符串

c++ - 创建链接数未知的结构节点

c++ - msvs 2015中模板实例化错误

linux - spidev 无法控制片选信号

linux - 最后期望的指令没有执行

c - 在linux中用c获取文件信息

java - 处理两个 JOptionPane showInputDialog 中的 java 取消按钮

c++ - recv 函数在使用两次时失败

c++ - 使 Clang-Format 忽略换行符的注释