零拷贝接收和消息大小

Dan*_*lla 3 zeromq

当使用零拷贝接收时,有没有办法查询收到的消息的大小?

有了这个我(尝试)实现零拷贝:

zmq_recv(sock, buf, sizeof(buf), 0);
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

zmq_msg_t msg;
zmq_msg_init_data (&msg, buf, sizeof(buf), nullptr, NULL);
zmq_msg_recv(&msg, sock, 0);
size_t len = zmq_msg_size(&msg);
Run Code Online (Sandbox Code Playgroud)

这将返回正确的大小,但不会填充buf.我认为zmq_msg_init_data不打算与zmq_msg_recv接收时使用和重建消息.

rve*_*erd 6

在零拷贝上引用指南:

在接收时无法进行零拷贝:ZeroMQ为您提供了一个缓冲区,您可以根据需要存储该缓冲区,但它不会将数据直接写入应用程序缓冲区.

零拷贝仅用于发送,不用于接收.

哦,并zmq_recv 返回收到的字节数.