【发布时间】:2021-11-15 06:28:17
【问题描述】:
我尝试通过 inproc 对套接字发送一些小(8 字节)消息。然而,经过几次尝试 zmq_send() 块。当我停止调试器时,我看到以下堆栈跟踪:
libc.so.6!__GI___poll(struct pollfd * fds, nfds_t nfds, int timeout)
libzmq.so.5!poll(int __timeout, nfds_t __nfds, pollfd * __fds)
libzmq.so.5!zmq::signaler_t::wait(zmq::signaler_t * const this, int timeout_)
libzmq.so.5!zmq::mailbox_t::recv(zmq::mailbox_t * const this, zmq::command_t * cmd_, int timeout_)
libzmq.so.5!zmq::socket_base_t::process_commands(zmq::socket_base_t * const this, int timeout_, bool throttle_)
libzmq.so.5!zmq::socket_base_t::send(zmq::socket_base_t * const this, zmq::msg_t * msg_, int flags_)
libzmq.so.5!s_sendmsg(int flags_, zmq_msg_t * msg_, zmq::socket_base_t * s_)
libzmq.so.5!zmq_send(void * s_, const void * buf_, size_t len_, int flags_)
为什么会这样? ZMQ 尝试处理哪些命令?为什么它调用recv()?是因为水位高吗?我想这是不同的,因为我发送了少量数据并且还没有达到水印。如果水印是唯一的解释,那我该如何衡量呢?
【问题讨论】:
-
您使用的是什么类型的 zmq_socket?你指定了什么标志?该行为非常特定于袜子类型。
-
没有看到你的代码很难猜出哪里出了问题。请edit您的问题并显示minimal reproducible example。
-
@ChrisDodd 它是 inprox 对,如问题所示。没有标志。
-
@Bodo 我会尝试,但代码相当大。我观察到 _pipe 是 NULL 所以 zmq::pair_t::xsend() 返回 -1。