【发布时间】:2021-01-23 20:08:28
【问题描述】:
我用zmq_poll() 编写了一个zmq 代理,它有3 个前端和3 个后端,超时时间为-1,这使得它无穷无尽。前端套接字使用面向连接的tcp://-transport-class,并且zmq_bind() 与主机IP 地址上的tcp-端口相关联,例如tcp://192.168.1.1:1000。
当我的主机 IP 地址发生变化时,有什么办法可以打破无休止的zmq_poll( ..., ..., -1 ) 循环?
while(1) {
zmq_msg_t message;
zmq_pollitem_t items [] = {
{ frontend1, 0, ZMQ_POLLIN, 0 },
{ backend1, 0, ZMQ_POLLIN, 0 },
};
zmq_poll (items, 2, -1);
if(items[0].revents & ZMQ_POLLIN) {
...
}
if(items[1].revents & ZMQ_POLLIN) {
...
}
}
我尝试轮询 ZMQ_POLLIN | ZMQ_POLLERR 之类的事件,但是当我手动更改主机的 IP 地址时,它不会从对 zmq_poll( ..., ..., -1 ) 的调用中返回。
【问题讨论】:
-
当 IP 地址发生变化时,需要向您的程序发送信号。然后信号导致 zmq_poll 返回 EINTR 错误。信号处理程序可能应该引发一些标志,并且在你的主循环中,你应该检查这个标志。
标签: linux zeromq polling distributed-system czmq