Mavericks[NSSocketPortNameServer portForName:host:]
では、localhost の解決に約 5 秒かかります。以前ははるかに高速で、約 0.01 秒でした。
私のコードは、 Apple の Introduction to Distributed Objectsと同じです。
以前は、0.1 秒未満で子プロセスを開始して接続できました。 私のファイル マネージャーはいくつかの子プロセスを実行しており、このため現在 Mavericks では機能していません。アプリはサンドボックス化されていません。
なぜそんなに[NSSocketPortNameServer portForName:host:]
時間がかかるのか理解できません。多分私は何か間違ったことをしています。
アドバイスをいただければ幸いです。
サーバーコード
実行には約 0.1 秒かかります。
NSSocketPort* port = [[NSSocketPort alloc] init];
NSConnection* connection = [NSConnection connectionWithReceivePort:port sendPort:nil];
[[NSSocketPortNameServer sharedInstance] registerPort:port name:@"doug"];
サーバーに接続するクライアント コード
マーベリックスでは 5 秒かかります。
これには、Mountain Lion と Lion で約 0.1 秒かかっていました。
NSPort* port = [[NSSocketPortNameServer sharedInstance] portForName:@"doug" host:@"*"];
NSConnection* connection = [NSConnection connectionWithReceivePort:nil sendPort:port];
私もnil
このように試しまし[[NSSocketPortNameServer sharedInstance] portForName:name host:nil]
た。違いはありませんでした。
接続を無効にして再度接続しようとすると、[[NSSocketPortNameServer sharedInstance] portForName:name host:nil]
5 秒かかります。
何が原因でしょうか
で DNS 構成をダンプするとscutil --dns
、ローカル ドメインに 5 秒のタイムアウトがあることがわかります。このタイムアウトは、Mavericks の前に 0 秒に設定されていたと思われます。すべてのユーザーにこのタイムアウトをリセットするように依頼することはできないため、このタイムアウトを回避するために Mavericks で何をすべきかを調査し続けます。