如何在iOS应用程序中实现so_keepalive

时间:2015-04-20 16:55:08

标签: ios sockets tcp keep-alive

我有一个iOS应用程序,它使用TCP连接来使用目标C连接到主机服务器。 我希望我的应用程序向主机发送keepalive。 我最初尝试创建一个发送keepalive数据包的计时器事件。但是当应用程序最小化时,这会停止。我可以看到套接字可以配置为使用setsocketopt()方法中的SO_KEEPALIVE发送TCP keepalive。
1.这有助于我的应用程序即使在最小化时发送保持活动。(该应用程序配置为VOIP以在后台运行)
2.如何启用keepalive并设置延迟。 这是我试过的。我正在使用CFStream进行读写。一旦流打开,我使用了下面的代码行,类似于给出的代码 NSStream TCP Keep-alive iOS

CFSocketNativeHandle nativeHandle;
CFDataRef nativeProperty = CFReadStreamCopyProperty(readStream, kCFStreamPropertySocketNativeHandle);
CFDataGetBytes(nativeProperty, CFRangeMake(0, CFDataGetLength(nativeProperty)), (UInt8 *)&native);
CFRelease(nativeProperty);

int delay=5;
setsockopt(nativeHandle, SOL_SOCKET, SO_KEEPALIVE,&delay, sizeof(delay));

但我看不到任何keepalive数据包被发送。我试图使用wireshark看到keepalive。传输的数据包类似于没有上述更改的数据包。当我将延迟设为5时,我预计Keepalive之间会有5秒的延迟。我希望我就在这里。
非常感谢任何帮助。

0 个答案:

没有答案