我正在创建一个使用NSNetService发布服务器的应用程序,我遇到了NSNetServiceListenForConnections
选项,可以在OS X 10.9中使用publishWithOptions:
方法。这个新选项在Apple提供的“What's New in OS X 10.9”页面中突出显示。它陈述If you send the NSNetServiceListenForConnections option flag in the options value passed to publishWithOptions:, OS X automatically handles all of the connection management for you
,但是,我不知道这是一个新的行为?我目前只是调用publish
方法并等待ServerAcceptCallBack
,这是CFSocketCreate
方法设置的。我似乎没有让这更容易吗?
我在CocoaEcho示例中关注some of Apple's code,该示例获取一个端口并打开CFSocket
。我知道您可以将0
作为port
方法的initWithDomain: name: port:
参数传递,但选择“随机”端口,我猜这不是100%安全的事情做。我认为NSNetServiceListenForConnections
可能与此有关,但按说明进行,却没有。
所以对于我的实际问题,毕竟漫无边际:
NSNetServiceListenForConnections
选项实际做什么,以及(为什么)我应该使用它?
附带问题:如果我应该使用它,我该如何检查可用性?我被告知要使用if (&NSNetServiceListenForConnections != NULL)
,但NSNetServiceListenForConnections
是NSUInteger
,因此我无法获取地址(通过&
)
答案 0 :(得分:1)
使用此选项,您根本不必打开或管理套接字(即不调用CFSocketCreate)。它为您创建套接字。虽然我在10.9.2中发现,如果你在netService上调用stop,它没有正确关闭套接字,但我还在调查。 (它似乎在10.9.0和10.9.1中关闭它们)。在您退出应用程序之前,套接字似乎保持打开状态。