系统相关
首页 > 系统相关> > c-在Linux中调用socket.close之后,socket.read_some需要相当长的时间才能返回

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