summaryrefslogtreecommitdiff
path: root/doc/zmq_recv.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/zmq_recv.txt')
-rw-r--r--doc/zmq_recv.txt70
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]