2016-07-14 10 views
1

私のアプリケーションでは、NetMQソケットを作成して廃棄しています。私は、そのエンドポイントにバインドされた以前のソケットの廃棄後、しばらくの間エンドポイントにバインドできないことに気付きました。最低限の例は:NetMQソケット廃棄後にエンドポイントを再利用できません

const string endpoint = "tcp://127.0.0.1:1234"; 

using (var publisher = new PublisherSocket()) 
    publisher.Bind(endpoint); 

using (var publisher = new PublisherSocket()) 
    publisher.Bind(endpoint); //throws a NetMQException: "Unknown error (0xffffffff)" 

Lingerオプションが0に設定されているが、私はまだ2番目のバインドの前に(私の実験では、数秒まで)を待たなければなりません。

Thread.Sleepまたはその他の遅延命令を追加できますが、これは堅牢でもエレガントでもありません。

これはバグですか?そうでない場合は、すでにエンドポイントにバインドできることを確認する正しい方法は何ですか?

答えて

2

バグではなく、ソケットの廃棄は非同期で、バックグラウンドスレッドで行われます。破棄する前にUnbindを呼び出そうとすると、処理が速くなる可能性があります。

関連する問題