为什么即使没有服务器在监听,ZeroMQ连接也返回0?

Ale*_*eld 5 c zeromq

我在C中使用ZeroMQ 3.2。我遇到的问题是,当我尝试连接到某个远程端点时

void* context = zmq_ctx_new();
void* socket = zmq_socket(context, ZMQ_DEALER);
int rc = zmq_connect(socket, addr);
Run Code Online (Sandbox Code Playgroud)

rc始终为0,表示一切正常,如API所述。即使根本没有服务器监听。

我想念什么吗?

Jak*_*lås 4

一切都是它应该的样子。ZeroMq 的一个优点(当然取决于您如何看待它)是您不必在服务器启动后进行连接,这也意味着即使与服务器的连接暂时断开也可以进行连接。ZeroMq 将保持连接(请求)并重试。

\n\n

zmq_connect()的 Api 文档指出:

\n\n
\n

对于大多数传输和套接字类型,连接不会立即执行,而是根据 \xc3\x98MQ 的需要执行。因此,成功调用 zmq_connect() 并不意味着连接已经或可以实际建立。因此,对于大多数传输和套接字类型,服务器套接字的绑定顺序和客户端套接字的连接顺序并不重要。第一个例外是使用 inproc:// 传输时:必须在调用 zmq_connect() 之前调用 zmq_bind()。第二个例外是 ZMQ_PAIR 套接字,它不会自动重新连接到端点。

\n
\n\n

如文档中所示,无响应/现有端点没有错误代码。基本上,只要您提供有效的端点(例如,您没有达到每个进程的套接字限制),您应该就可以了。

\n