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

时间:2013-02-04 13:16:17

标签: c zeromq

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

void* context = zmq_ctx_new();
void* socket = zmq_socket(context, ZMQ_DEALER);
int rc = zmq_connect(socket, addr);

rc总是0,意味着每件事都是O.K.如API所述。即使没有服务器正在监听

我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

一切都是应有的。 ZeroMq的一个优点(取决于你如何看待它)是你在服务器启动后不必连接,也意味着即使与服务器的连接暂时关闭也可以连接。 ZeroMq将保持连接(请求)并重试。

zmq_connect()的Api文档指出:

  

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

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

答案 1 :(得分:1)

正如指南所述:

  

客户端节点执行zmq_connect()后,连接就会存在   并且该节点可以开始将消息写入套接字。在某个阶段   (希望在消息排队之前他们开始得到这么多   丢弃,或客户端阻止),服务器活跃,做了   zmq_bind()和ØMQ开始传递消息。