diff options
Diffstat (limited to 'doc/zmq_recv.txt')
-rw-r--r-- | doc/zmq_recv.txt | 70 |
1 files changed, 23 insertions, 47 deletions
diff --git a/doc/zmq_recv.txt b/doc/zmq_recv.txt index 0b6e0e4..f09d298 100644 --- a/doc/zmq_recv.txt +++ b/doc/zmq_recv.txt @@ -9,30 +9,29 @@ zmq_recv - receive a message from a socket SYNOPSIS -------- -*int zmq_recv (void '*socket', zmq_msg_t '*msg', int 'flags');* +*int zmq_recv (void '*socket', void '*buf', size_t 'len', int 'flags');* DESCRIPTION ----------- -The _zmq_recv()_ function shall receive a message from the socket referenced by -the 'socket' argument and store it in the message referenced by the 'msg' -argument. Any content previously stored in 'msg' shall be properly deallocated. -If there are no messages available on the specified 'socket' the _zmq_recv()_ -function shall block until the request can be satisfied. The 'flags' argument -is a combination of the flags defined below: +The _zmq_recv()_ function shall receive a message from the socket referenced +by the 'socket' argument and store it in the buffer referenced by the 'buf' +argument. Any bytes exceeding the length specified by the 'len' argument shall +be truncated. If there are no messages available on the specified 'socket' +the _zmq_recv()_ function shall block until the request can be satisfied. +The 'flags' argument is a combination of the flags defined below: *ZMQ_DONTWAIT*:: Specifies that the operation should be performed in non-blocking mode. If there -are no messages available on the specified 'socket', the _zmq_recv()_ function -shall fail with 'errno' set to EAGAIN. +are no messages available on the specified 'socket', the _zmq_recv()_ +function shall fail with 'errno' set to EAGAIN. Multi-part messages ~~~~~~~~~~~~~~~~~~~ -A 0MQ message is composed of 1 or more message parts; each message part is an -independent 'zmq_msg_t' in its own right. 0MQ ensures atomic delivery of -messages; peers shall receive either all _message parts_ of a message or none -at all. +A 0MQ message is composed of 1 or more message parts. 0MQ ensures atomic +delivery of messages; peers shall receive either all _message parts_ of a +message or none at all. The total number of message parts is unlimited. @@ -46,8 +45,10 @@ shall report a value of zero. Otherwise, _ZMQ_RCVMORE_ shall report a value of RETURN VALUE ------------ -The _zmq_recv()_ function shall return zero if successful. Otherwise it shall -return `-1` and set 'errno' to one of the values defined below. +The _zmq_recv()_ function shall return number of bytes in the message +if successful. Note that the value can exceed the value of the 'len' parameter +in case the message was truncated. If not successful the function shall return +`-1` and set 'errno' to one of the values defined below. ERRORS @@ -57,8 +58,8 @@ Non-blocking mode was requested and no messages are available at the moment. *ENOTSUP*:: The _zmq_recv()_ operation is not supported by this socket type. *EFSM*:: -The _zmq_recv()_ operation cannot be performed on this socket at the moment due -to the socket not being in the appropriate state. This error may occur with +The _zmq_recv()_ operation cannot be performed on this socket at the moment +due to the socket not being in the appropriate state. This error may occur with socket types that switch between several states, such as ZMQ_REP. See the _messaging patterns_ section of linkzmq:zmq_socket[3] for more information. *ETERM*:: @@ -68,48 +69,23 @@ The provided 'socket' was invalid. *EINTR*:: The operation was interrupted by delivery of a signal before a message was available. -*EFAULT*:: -The message passed to the function was invalid. EXAMPLE ------- .Receiving a message from a socket ---- -/* Create an empty 0MQ message */ -zmq_msg_t msg; -int rc = zmq_msg_init (&msg); -assert (rc == 0); -/* Block until a message is available to be received from socket */ -rc = zmq_recv (socket, &msg, 0); -assert (rc == 0); -/* Release message */ -zmq_msg_close (&msg); ----- - -.Receiving a multi-part message ----- -int64_t more; -size_t more_size = sizeof more; -do { - /* Create an empty 0MQ message to hold the message part */ - zmq_msg_t part; - int rc = zmq_msg_init (&part); - assert (rc == 0); - /* Block until a message is available to be received from socket */ - rc = zmq_recv (socket, &part, 0); - assert (rc == 0); - /* Determine if more message parts are to follow */ - rc = zmq_getsockopt (socket, ZMQ_RCVMORE, &more, &more_size); - assert (rc == 0); - zmq_msg_close (&part); -} while (more); +char buf [256]; +nbytes = zmq_recv (socket, buf, 256, 0); +assert (nbytes != -1); ---- SEE ALSO -------- +linkzmq:zmq_recvmsg[3] linkzmq:zmq_send[3] +linkzmq:zmq_sendmsg[3] linkzmq:zmq_getsockopt[3] linkzmq:zmq_socket[7] linkzmq:zmq[7] |