如何检测TCP连接丢失?

3
我有一段跨平台的代码,我在Linux和iPhone上使用socket级别编写。它打开非阻塞套接字并连接到服务器。除了有时当客户端/服务器断开连接时,在recv或send调用期间会通过SIGPIPE停止另一个进程外,一切都很好。
这是有道理的。在Linux上,我可以使用标志来指示OS lib不引发SIGPIPE-然后我可以自己感知错误并进行清理处理。这很好。
但是,在iPhone OS(以及我后来关心的osx)上没有标志表明不要抛出SIGPIPE。我可以使用signal(SIGPIPE, IGN);,这似乎通常可以停止它,但有时仍然会出现问题?(这可能是由于我设置信号处理的位置,我可能只在应用程序启动时执行它,我可能需要每次应用程序变为活动状态时执行它?)
所有这些让我觉得我捕获断开连接的方式不对-我应该使用select()或类似方法来感知是否发生了断开连接?具体来说,我该怎么做?
1个回答

1

你真的应该在谷歌上搜索一下(例如,this page)。简而言之,尝试使用SO_NOPIPE套接字选项,除了你已经尝试过的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接