2016-11-15 4 views
0

私はリクエスト - 応答パターンで返信ZSocketを持っています。ZeroMQソケットを破壊せずに別のポートに再バインドできますか?

このプロセスの後半で、バインディングを切り替えたいので、応答ソケットが別のポートの要求に応答するようになりました。ユーザーがリッスンしたいポートを、デフォルトのポート5555でリッスンしたくない場合は、入力します。

これを行うには、単にZSocket.Bind()を再度呼び出すか、最初にソケットオブジェクト。

私が最初に破壊する必要がある場合、ZSocketが今すぐ何かにリバウンドする準備ができていることを確認するにはどうすればいいですか?閉じたソケットは、ガベージコレクションを持たないので、Cでは別の方法で処理されることがわかります。 ZeroMQのC#言語バインディングはガベージコレクションを使用できるので、ソケットを閉じて別のポートに新しいものを作成するだけで簡単ですか?低リンガー値などを設定することに気をつける必要がありますか?

ドキュメントでこれについて何も見つかりませんでした。ここ はここZeroMQ: Address in use error when re-binding socket

関連する質問です私は

private ZContext context = new ZContext(); 
private ZSocket replier = new ZSocket(context, ZSocketType.REP); 
replier.Bind("tcp://*:5555); //bind to default port 
//yada yada... 
//user enters new port to listen on 5556 
replier.Bind("tcp://*:5556); 

を持っているコードは、これを行うための適切な方法は何ですか?答えの背後にある論理を説明してください。

答えて

0

私はC#バインディングについてはわかりませんが、プレーンC APIを使用してzmqソケットを再バインドして、すぐに新しいポートでメッセージを受信することができます。リンガー期間はあなたの場合とは無関係です。

+0

よろしくお願いいたします。安全なシャットダウンのためにCでリリースする前に、リンガーを低く設定してソケットを閉じる必要があることを読んだ。それが別のポートに再バインドする場合は、そのことを確認してください。私はそれが動作するかどうかを確認するために単純な再バインドを試みるつもりです – ComradeJoecool

+0

別のポートでもう一度Bind()を呼び出すと、新しいポートでメッセージを受信できるようになりますが、古いポートは別のものにバインドできません。 – ComradeJoecool

+0

これは、zmqソケットを複数のネットワークソケットにバインドできるため、2番目のバインド呼び出しは、既存のものを置き換えるのではなく、余分なTCP接続を追加するためです。 – David

関連する問題