是什么导致CFSocket自行关闭?

时间:2012-09-17 09:58:24

标签: objective-c c cocoa-touch sockets

我有一个需要底层CFSocket的类方法,并且这个方法经常被调用,因此每次运行该方法时创建和销毁一个新套接字的成本太高。所以我改为创建了一个CFSocketRef的static实例,这样我就可以在方法调用之间共享一个套接字:

+(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
}

我有两个问题:

  1. 当应用程序终止时,我是否必须担心销毁套接字(使其无效),或者它是否自行关闭?
  2. 哪些事件可能会导致套接字自行关闭,以及如何防止可能写入错误的CFSocketRef

0 个答案:

没有答案