c-在Linux中调用socket.close之后,socket.read_some需要相当长的时间才能返回
作者:互联网
我使用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邮件列表上进行了无限讨论.在Boost Bug跟踪器上还有一个ticket在讨论它.
另请参见my answer,以类似的问题.
标签:sockets,tcp,boost-asio,linux,c-4 来源: https://codeday.me/bug/20191102/1992988.html