3
我有我在Linux和iPhone上的套接字级编写的跨平台代码。它打开非阻塞套接字并连接到服务器。除非有时当客户端/服务器之一断开连接,在recv或发送呼叫期间通过SIGPIPE在另一端暂停执行程序时,一切都很好。如何检测TCP连接丢失?
这很有道理。在Linux上,我可以使用一个标志来向操作系统库指示不要引发SIGPIPE - 然后我可以自己察觉错误并且干净地处理它。这工作正常
然而,在iPhone OS(和大概是我后来关心的OSX)没有标志表明不投SIGPIPE。我可以做信号(SIGPIPE,IGN);这似乎通常停止它,但仍然有时我得到它? (这可能是由于我设置了信号处理的位置 - 我可能只会在应用程序启动时执行此操作,而我可能必须在每次应用程序变为活动状态时执行此操作)
这一切都让我感觉像我一样是否以错误的方式捕捉断开连接 - 我应该使用select()还是朋友来检测断开连接是否已经发生?具体怎么做?