NSNetService NSNetServiceListenForConnections使用和检查可用性?

时间:2014-02-24 21:13:58

标签: objective-c macos nsnetservice

我正在创建一个使用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),但NSNetServiceListenForConnectionsNSUInteger,因此我无法获取地址(通过&

1 个答案:

答案 0 :(得分:1)

使用此选项,您根本不必打开或管理套接字(即不调用CFSocketCreate)。它为您创建套接字。虽然我在10.9.2中发现,如果你在netService上调用stop,它没有正确关闭套接字,但我还在调查。 (它似乎在10.9.0和10.9.1中关闭它们)。在您退出应用程序之前,套接字似乎保持打开状态。