我可以在不破坏套接字的情况下将ZeroMQ套接字重新绑定到另一个端口吗?

本文关键字:套接字 绑定 另一个 情况下 我可以 ZeroMQ 新绑定 | 更新日期: 2023-09-27 18:18:00

我有一个请求-应答模式的回复ZSocket。

在稍后的过程中,我想切换绑定,因此应答套接字现在响应不同端口上的请求。如果用户不想监听默认端口5555,则输入他们想要监听的端口。

我可以通过再次调用ZSocket.Bind()来实现这一点吗?还是我必须先销毁socket对象?

如果我必须先销毁它,那么我怎么能确定ZSocket现在准备好被反弹到其他东西?我知道在C中关闭套接字的处理方式不同,因为它没有垃圾收集。既然ZeroMQ的c#语言绑定可以使用垃圾收集,那么它就像关闭套接字并在另一个端口上创建一个新套接字一样简单吗?我需要设置一个较低的逗留值或类似的东西吗?

我在文档中找不到关于这个的任何内容。这是一个相关的问题ZeroMQ:地址在使用错误时重新绑定套接字

下面是我的代码

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);

正确的方法是什么?请解释一下答案背后的逻辑。

我可以在不破坏套接字的情况下将ZeroMQ套接字重新绑定到另一个端口吗?

我不确定c#绑定,但您可以使用普通C api重新绑定zmq套接字,并立即开始在新端口上接收消息。逗留期与您的情况无关。