Ios iphoneOS背面接地插座

Ios iphoneOS背面接地插座,ios,sockets,background,Ios,Sockets,Background,我有一个简单的TCP客户端,它连接到一个简单的TCP服务器,每5秒钟发送一次“ping”这个词。我使用从标准C套接字库读取的命令来读取这些“ping” int numberOfBytes = read(m_clientSocketFileDescriptor,buffer,255); if (numberOfBytes < 0) { error("reading from socket"); } 当我按下home(主页)按钮时,这个功能非常有效。我的ping是从服务器接收的,当

我有一个简单的TCP客户端,它连接到一个简单的TCP服务器,每5秒钟发送一次“ping”这个词。我使用从标准C套接字库读取的命令来读取这些“ping”

int numberOfBytes = read(m_clientSocketFileDescriptor,buffer,255);
if (numberOfBytes < 0) { 
    error("reading from socket");
}
当我按下home(主页)按钮时,这个功能非常有效。我的ping是从服务器接收的,当我唤醒我的应用程序时,所有消息都已收到。 我的问题是当我使用电源按钮锁定iPhone屏幕时。插座实际上是关闭的。我的服务器接收到一个SIGPIPE错误,当我唤醒手机时,read()函数会说:“套接字未连接”

我认为,如果用户锁定屏幕(默认情况下,这种情况会在1到5分钟后发生),那么使用后台套接字是相当愚蠢的,因此可能我的操作方式不对

有人设法克服了这个问题吗?
使用iPhone3GS和iPhone4在iOS 5.0上进行测试。

您可能需要使用。我猜如果你没有这个处理程序,操作系统可以假设你的应用程序无论如何都无法处理对套接字的任何响应,然后关闭它。另请参见。

您可能需要使用。我猜如果你没有这个处理程序,操作系统可以假设你的应用程序无论如何都无法处理对套接字的任何响应,然后关闭它。另请参见。

是否按照@DarkDust的建议尝试了
setKeepAliveTimeout:handler:
?也许在
应用程序willresignactive:
中有一些准备工作要做?您是否尝试了@DarkDust建议的
setKeepAliveTimeout:handler:
?也许在
应用程序willresignactive:
中有一些准备工作要做?
 - (void)applicationWillEnterForeground:(UIApplication *)application
 {
   if (m_clientSocketFileDescriptor) {
         CFStreamCreatePairWithSocket(kCFAllocatorDefault, m_clientSocketFileDescriptor, &m_tcpReadStream, nil);
         if (m_tcpReadStream != NULL) {
         CFReadStreamSetProperty(m_tcpReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
         }
    }
  }