zmq_poll 从标准输入读取时没有监听信号
zmq_poll not listening on signal when reading from stdin
我在我的 C++ 应用程序中使用 zmq_poll
上的 Linux 调用来轮询从控制台输入读取。现在我没有使用任何 ZeroMQ 套接字,但我会在未来使用。
根据我的理解 zmq_poll
只有 Linux 可以使用 linux 文件描述符,包括 STDIN_FILENO
.
当我向我的应用程序发送 CTRL-C 时,我期待下面的代码 return 和 EINTR
。
当我调试它时,我可以看到它一直在等待直到超时结束并且它 returns res_num=0
.
zmq_pollitem_t* mpPollItems = new zmq_pollitem_t[1];
std::memset(mpPollItems,0,sizeof(zmq_pollitem_t));
mpPollItems[0].socket = NULL;
mpPollItems[0].fd = STDIN_FILENO;
mpPollItems[0].events = ZMQ_POLLIN;
// Poll for events some milliseconds
int res_num = zmq_poll (mpPollItems, 1, 10000);
zmq_poll
正在幕后使用 linux 'poll'。
我是不是对这段代码做错了什么,还是我误解了 zmq_poll
的工作方式?
会不会和信号屏蔽有关?
注意:我在从主线程生成的单独线程中调用 zmq_poll。
我直接使用 'poll' 进行了测试,得到了相同的结果。只有在主线程中调用 'poll' 时,我才能看到传递的信号;如果在单独的线程上调用它,则没有反应。
最近的 ZeroMQ API 扩展带来了一些 "dirty" 技巧,超出了 原始 Zen-of-ZERO.
是的,在 ZMQ_STREAM
可扩展正式沟通模式原型下扩展使用 O/S-native TCP-peers 成为可能,但是这些步骤开始出现交付不一致的问题expectation-v/s-reality。
原生 O/S-file-descriptor 可能会强制注入到 zmq_pollitems_t
[=13= 的 .fd
项中](s),然而 EINTR
信号在传播 O/S-signals 后针对 ZeroMQ-Socket()
-实例被提升"injected"-only 轮询的工作方式似乎不同。
如果同样的差异仍然存在 "complete"-设置(使用完全配置和设置 ZMQ_STREAM
-Socket()
-实例,不仅仅是 ad-hoc, .fd
-"injected"-only trick ) polling, best raise a change-request for the package maintainers, so refactor the handling back to the Zen-of-Zero 两种类型的统一模式 polled-devices.
我在我的 C++ 应用程序中使用 zmq_poll
上的 Linux 调用来轮询从控制台输入读取。现在我没有使用任何 ZeroMQ 套接字,但我会在未来使用。
根据我的理解 zmq_poll
只有 Linux 可以使用 linux 文件描述符,包括 STDIN_FILENO
.
当我向我的应用程序发送 CTRL-C 时,我期待下面的代码 return 和 EINTR
。
当我调试它时,我可以看到它一直在等待直到超时结束并且它 returns res_num=0
.
zmq_pollitem_t* mpPollItems = new zmq_pollitem_t[1];
std::memset(mpPollItems,0,sizeof(zmq_pollitem_t));
mpPollItems[0].socket = NULL;
mpPollItems[0].fd = STDIN_FILENO;
mpPollItems[0].events = ZMQ_POLLIN;
// Poll for events some milliseconds
int res_num = zmq_poll (mpPollItems, 1, 10000);
zmq_poll
正在幕后使用 linux 'poll'。
我是不是对这段代码做错了什么,还是我误解了 zmq_poll
的工作方式?
会不会和信号屏蔽有关?
注意:我在从主线程生成的单独线程中调用 zmq_poll。 我直接使用 'poll' 进行了测试,得到了相同的结果。只有在主线程中调用 'poll' 时,我才能看到传递的信号;如果在单独的线程上调用它,则没有反应。
最近的 ZeroMQ API 扩展带来了一些 "dirty" 技巧,超出了 原始 Zen-of-ZERO.
是的,在 ZMQ_STREAM
可扩展正式沟通模式原型下扩展使用 O/S-native TCP-peers 成为可能,但是这些步骤开始出现交付不一致的问题expectation-v/s-reality。
原生 O/S-file-descriptor 可能会强制注入到 zmq_pollitems_t
[=13= 的 .fd
项中](s),然而 EINTR
信号在传播 O/S-signals 后针对 ZeroMQ-Socket()
-实例被提升"injected"-only 轮询的工作方式似乎不同。
如果同样的差异仍然存在 "complete"-设置(使用完全配置和设置 ZMQ_STREAM
-Socket()
-实例,不仅仅是 ad-hoc, .fd
-"injected"-only trick ) polling, best raise a change-request for the package maintainers, so refactor the handling back to the Zen-of-Zero 两种类型的统一模式 polled-devices.