除了返回的结构之外,zmq_recv
和zmq_msg_recv
之间是否存在差异?哪一个应该与ZMQ_PAIR
套接字一起使用?
这个问题适用于ZeroMQ版本4.2.1。
答案 0 :(得分:2)
ZMQ_PAIR
&所有其他原型都可以同时使用分离原则有助于所有现有的高级可扩展形式通信模式({ PAIR | PULL | REQ | REP | XREP | XREQ | SUB | ... }
)忽略有关程序员使用的服务的详细信息,以及#34;并将它们视为一组受支持的外部用例。
这意味着可以使用以下两者之一:只是简单buf []
配备aRetCODE = zmq_recv(...);
或致电aRetCODE = zmq_msg_recv(...)
,其中稍微复杂一点,预先准备好的zmq_msg_t
对象应该做好充分准备。传递到内部处理。
如果在后一个用例中没有做到这一切,那么可以回复错误标记( aRetCODE == -1
)并在 errno == EFAULT
<中设置详细信息/ strong> - 这是错误代码的一个实例,解释如下:
<强>
EFAULT
强>
传递给该函数的消息无效。
因此两个调用都具有相同的返回值逻辑。
int zmq_recv ( void *socket, // yes, The Socket
void *buf, // a Buffer[] - byREF-> A STORAGE
size_t len, // a Buffer length
int flags // ZMQ details { ZMQ_NOBLOCK | ... }
);
更简单的一个是直截了当的,几乎是不言自明的。
如上所述,另一个需要更多关注:
zmq_msg_t aMsgSTRUCT; // first: create aMsgSTRUCT
int rc = zmq_msg_init( &aMsgSTRUCT );// next: try intitialise it ( internality )
assert (rc == 0); // test: if things went well ( use this style, even when it has no error-code associated here, with zmq_msg_init() )
rc = zmq_msg_recv( &aMsgSTRUCT, aSocket, ZMQ_NOBLOCK );
assert (rc != -1); // test: if things went well
... // process: rc-bytes in aMsgSTRUCT
.. //
. //
/* ALWAYS: */ zmq_msg_close( &aMsgSTRUCT );// finally: control dispose off
/* Release EACH message,
these are
not re-usable and
require ZeroMQ internalities
to take due care to release
all their allocated resources
*/