我有一个需要底层的类方法CFSocket
,并且该方法经常被调用,因此每次运行该方法时创建和销毁新套接字的成本太高。因此,我创建了static
一个 CFSocketRef 实例,因此我可以在方法调用之间共享一个套接字:
+(void)myStaticMethod {
static CFSocketRef udpSocket;
@synchronized(self) {
if (!udpSocket) {
udpSocket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_DGRAM, IPPROTO_UDP, 0, NULL, NULL);
int yes = 1;
setsockopt(CFSocketGetNative(udpSocket), SOL_SOCKET, SO_NOSIGPIPE, (void *)&yes, sizeof(yes));
}
}
//method body
}
我有两个问题:
- 当应用程序终止时,我是否必须担心破坏(无效)套接字,或者它是否会自行关闭?
- 哪些事件可能导致套接字自行关闭,您将如何防止可能写入 bad
CFSocketRef
?