将ZeroMQ套接字绑定到端点并关闭该套接字后,将另一个套接字绑定到同一端点需要进行多次尝试。zmq_bind
直到成功的呼叫之前的呼叫失败,并显示错误“地址正在使用”(EADDRINUSE
)。
以下代码演示了该问题:
#include <cassert>
#include <iostream>
#include "zmq.h"
int main() {
void *ctx = zmq_ctx_new();
assert( ctx );
void *skt;
skt = zmq_socket( ctx, ZMQ_REP );
assert( skt );
assert( zmq_bind( skt, "tcp://*:5555" ) == 0 );
assert( zmq_close( skt ) == 0 );
skt = zmq_socket( ctx, ZMQ_REP );
assert( skt );
int fail = 0;
while ( zmq_bind( skt, "tcp://*:5555" ) ) { ++fail; }
std::cout << fail << std::endl;
}
我在Windows XP SP3上使用ZeroMQ 4.0.3,编译器为VS2008。libzmq.dll已使用提供的Visual Studio解决方案构建。
1
当执行“调试”构建(上面的代码和libzmq.dll两者)并0
使用“发布”构建时,将在此处打印。奇怪的是,当使用混合构建配置(带有Release lib的调试)运行以上代码时,fail
计数最多为6。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句