我正在尝试将我的应用程序设置为即使在应用程序被挂起时也能监听 tcp-socket。如苹果文档中所述,我在 Info.plist 中设置了 voip-background 模式。现在我被困在哪里说:“配置应用程序的一个套接字以供 VoIP 使用。”。我正在尝试使用 CFReadStreamSetProperty() 方法来做到这一点,但关键是我如何创建套接字。套接字的创建是通过标准 C 库完成的,如下所示:
int mySock = socket(AF_INET, SOCK_STREAM, 0);
这是在现有库中的 .cpp 文件中完成的。这是我尝试为 VoIP 使用配置套接字的内容:
CFStreamCreatePairWithSocket(kCFAllocatorDefault, sock, &readStream, &writeStream);
if(readStream && writeStream)
{
CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
}
当我逐步完成它时,它看起来不错,但不幸的是它不起作用。每当应用程序从前台转到后台/挂起时,连接就会丢失,并且来自服务器的任何输入都会被忽略。我不知道套接字的配置是否可以这样完成并且找不到答案。