我将 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/