私はリクエスト - 応答パターンで返信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);
を持っているコードは、これを行うための適切な方法は何ですか?答えの背後にある論理を説明してください。
よろしくお願いいたします。安全なシャットダウンのためにCでリリースする前に、リンガーを低く設定してソケットを閉じる必要があることを読んだ。それが別のポートに再バインドする場合は、そのことを確認してください。私はそれが動作するかどうかを確認するために単純な再バインドを試みるつもりです – ComradeJoecool
別のポートでもう一度Bind()を呼び出すと、新しいポートでメッセージを受信できるようになりますが、古いポートは別のものにバインドできません。 – ComradeJoecool
これは、zmqソケットを複数のネットワークソケットにバインドできるため、2番目のバインド呼び出しは、既存のものを置き換えるのではなく、余分なTCP接続を追加するためです。 – David