iphone - 如何检测TCP连接丢失?

标签 iphone linux sockets posix

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

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

但是在 iPhone 操作系统(可能还有我后来关心的 osx)上,没有标志指示不抛出 SIGPIPE。我可以做信号(SIGPIPE,IGN);这似乎通常会阻止它,但有时我还是会明白??? (这可能是由于我设置信号处理的位置 - 我可能只在应用程序启动时执行此操作,而我可能必须在每次应用程序激活时执行此操作??)

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

最佳答案

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

关于iphone - 如何检测TCP连接丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4769657/

相关文章:

linux - K8s 'calico' pod 未启动 : "Failed to create default IPv4 IP pool: 10.244.0.0/16 error=resource does not exist:"

编译错误 :c language in telnet(linux)

ios - 尝试在其 View 不在窗口层次结构中的 firstController 上呈现 <UINavigationController>

linux - wget:下载目录/子目录中的所有文件

iphone - CKQueryOperation 获取最后一条记录

c - 系统调用中断的奇怪错误,我无法调试

Java UDP 服务器,并发客户端

c - 套接字中的网络字节顺序

iphone - 有没有办法为 iPhone/iPad/Android 开发跨平台应用程序?

iphone - Objective C 改变一个对象的值