【发布时间】:2015-01-30 23:15:22
【问题描述】:
Ubuntu 14.04。如果 recv() 在打开的连接上等待数据时被阻塞,则从另一个线程调用的 close() 或 shutdown() 不会导致 recv() 在对等方关闭连接之前返回。
如何解除对recv() 的屏蔽?
我在 Thrift 的 TServerSocket 类中发现了这种行为。
【问题讨论】:
-
是socket set的keep alive等选项吗?您可以尝试取消设置吗?
-
“在连接打开之前没有强制
recv()返回”是什么意思?你的问题是什么? @fayyazki 这些选项与它到底有什么关系? -
我希望在我调用 socket 上的 close 后 recv 会返回。
-
只有禁用逗留选项。我试图评论它,但这并没有改变行为。
-
您不需要禁用 linger 选项。默认情况下它是关闭的,最好保持这种状态。关于keepalive的建议同样无关紧要。