【发布时间】:2011-06-13 18:27:39
【问题描述】:
我在 Linux 和 iPhone 上的套接字级别编写了跨平台代码。它打开非阻塞套接字并连接到服务器。一切都很好,除了有时当其中一个客户端/服务器断开连接时,它会在接收或发送调用期间通过 SIGPIPE 在另一个上停止执行。
这是有道理的。在 Linux 上,我可以使用一个标志来指示 OS lib 不要引发 SIGPIPE - 然后我可以自己感知错误并干净地处理它。效果很好
但是在 iPhone OS(大概是我后来关心的 osx)上,没有标志表明不抛出 SIGPIPE。我可以做信号(SIGPIPE,IGN);这似乎通常会阻止它,但有时我还是会明白??? (这可能是因为我在哪里设置了信号处理 - 我可能只在应用启动时才这样做,而我可能不得不在每次应用激活时都这样做??)
这一切都让我觉得我以错误的方式捕捉断开连接 - 我应该使用 select() 还是使用朋友来感知是否发生断开连接?具体我该怎么做?
【问题讨论】:
标签: iphone linux sockets posix