Cocoa touch GCDAsyncSocket即使在断开连接后也无法多次接受端口
我希望能够关闭当前侦听端口的套接字,然后返回该套接字并在端口上重新建立侦听。我无法做到这一点,因为在另一个服务器侦听套接字上的第二个acceptOnPort调用总是以错误结束(地址已在使用)。如何关闭侦听套接字并重新建立一个新套接字?查看我刚才添加的 GCDAsyncSocket永远不会解除分配,因为dispatch_source_set_event_处理程序持有对块的引用,而该块持有对GCDAsyncSocket自身的引用 这导致无法关闭然后重新打开GCDAsyncSocket侦听器,因为该地址已在使用中 这可以通过将引用更改为弱引用来解决。在dispatch\u source\u set\u event\u处理程序之前,添加以下行: __弱GCDAsyncSocket*weakSelf=self 然后使用weakSelf而不是self调用doAccept while([weakSelf-doAccept:socketFD]&&(++iCocoa touch GCDAsyncSocket即使在断开连接后也无法多次接受端口,cocoa-touch,sockets,gcdasyncsocket,Cocoa Touch,Sockets,Gcdasyncsocket,我希望能够关闭当前侦听端口的套接字,然后返回该套接字并在端口上重新建立侦听。我无法做到这一点,因为在另一个服务器侦听套接字上的第二个acceptOnPort调用总是以错误结束(地址已在使用)。如何关闭侦听套接字并重新建立一个新套接字?查看我刚才添加的 GCDAsyncSocket永远不会解除分配,因为dispatch_source_set_event_处理程序持有对块的引用,而该块持有对GCDAsyncSocket自身的引用 这导致无法关闭然后重新打开GCDAsyncSocket侦听器,因为该地
更好的API应该是在dealloc发生之前使用某种“Kill”方法调用来杀死GCDAsyncSocket。我做了您建议的“弱”更改,第二次尝试接受端口时仍然出错。我遗漏了什么吗?彼得,一旦我在随后的接收端口上引入了一点延迟,你的建议就行了。非常感谢。