【问题标题】:How to detect TCP connection lost?如何检测 TCP 连接丢失?
【发布时间】:2011-06-13 18:27:39
【问题描述】:

我在 Linux 和 iPhone 上的套接字级别编写了跨平台代码。它打开非阻塞套接字并连接到服务器。一切都很好,除了有时当其中一个客户端/服务器断开连接时,它会在接收或发送调用期间通过 SIGPIPE 在另一个上停止执行。

这是有道理的。在 Linux 上,我可以使用一个标志来指示 OS lib 不要引发 SIGPIPE - 然后我可以自己感知错误并干净地处理它。效果很好

但是在 iPhone OS(大概是我后来关心的 osx)上,没有标志表明不抛出 SIGPIPE。我可以做信号(SIGPIPE,IGN);这似乎通常会阻止它,但有时我还是会明白??? (这可能是因为我在哪里设置了信号处理 - 我可能只在应用启动时才这样做,而我可能不得不在每次应用激活时都这样做??)

这一切都让我觉得我以错误的方式捕捉断开连接 - 我应该使用 select() 还是使用朋友来感知是否发生断开连接?具体我该怎么做?

【问题讨论】:

    标签: iphone linux sockets posix


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2014-01-03
      • 1970-01-01
      • 2012-08-18
      • 2011-05-19
      • 1970-01-01
      相关资源
      最近更新 更多