【发布时间】:2016-03-20 00:23:49
【问题描述】:
我正在使用ZeroMQ 编写一个小型测试应用程序。
我的一个测试场景是没有运行可连接的服务器。
所以,在那种情况下,我将ZMQ_DONTWAIT 传递给zmq_recv(),期望错误为EAGAIN,但得到errno 的值为0。
下面的示例客户端代码:
int rc;
void *context = zmq_ctx_new();
void *requester = zmq_socket(context, ZMQ_REQ);
int nLingerOption = 0;
rc = zmq_setsockopt(requester, ZMQ_LINGER, &nLingerOption, sizeof(nLingerOption));
rc = zmq_connect(requester, "tcp://127.0.0.1:5555");
int nSendLen = zmq_send(requester, "M", 1, 0);
char buffer[1000];
int nRecvLen = zmq_recv(requester, buffer, sizeof(buffer)-1, ZMQ_DONTWAIT);
if( nRecvLen < 0 )
printf("errno = %d\n", errno);
为什么输出是0 而不是EAGAIN(在我的系统上定义为11)。
编辑:这是运行 ZeroMQ 4.1 版
【问题讨论】:
-
您确定您的目标 API 版本吗?虽然
ØMQ/3.2.6使用ZMQ_DONTWAIT有点旧,但有时为了分布式版本的交叉兼容性仍然使用ØMQ/2.1.11API 使用ZMQ_NOBLOCK并返回0成功,-1失败。 -
@user3666197 我认为我正在运行 ZeroMQ 4.1 版。有时我在查找某些内容时会抓取错误的文档。
-
为了清楚起见,您说
zmq_recv()返回-1,您对nRecvLen的检查将您传递给您的printf(),而您的printf()是在说errno = 0,对吗? -
@Jason - 是的,就是这样
标签: windows zeromq nonblocking