summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorMartin Lucina <mato@kotelna.sk>2010-05-31 14:12:27 +0200
committerMartin Lucina <mato@kotelna.sk>2010-05-31 14:12:27 +0200
commiteb9ff1e77977c6199c0a0439f4dd35fa39f3bd3c (patch)
tree56e12c116be0e96b039010e53826d74b7c351c34 /doc
parent8becacf82c950af951f477e3dc3f7ac79e110fc1 (diff)
Documentation updates
Multi-part messages
Diffstat (limited to 'doc')
-rw-r--r--doc/zmq_getsockopt.txt17
-rw-r--r--doc/zmq_recv.txt37
-rw-r--r--doc/zmq_send.txt33
3 files changed, 85 insertions, 2 deletions
diff --git a/doc/zmq_getsockopt.txt b/doc/zmq_getsockopt.txt
index 13243ec..4aef71c 100644
--- a/doc/zmq_getsockopt.txt
+++ b/doc/zmq_getsockopt.txt
@@ -24,6 +24,23 @@ to by 'option_value'.
The following options can be retrieved with the _zmq_getsockopt()_ function:
+ZMQ_RCVMORE: More message parts to follow
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+The 'ZMQ_RCVMORE' option shall return a boolean value indicating if the
+multi-part message currently being read from the specified 'socket' has more
+message parts to follow. If there are no message parts to follow or if the
+message currently being read is not a multi-part message a value of zero shall
+be returned. Otherwise, a value of 1 shall be returned.
+
+Refer to linkzmq:zmq_send[3] and linkzmq:zmq_recv[3] for a detailed description
+of sending/receiving multi-part messages.
+
+Option value type:: int64_t
+Option value unit:: boolean
+Default value:: N/A
+Applicable socket types:: all
+
+
ZMQ_HWM: Retrieve high water mark
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_HWM' option shall retrieve the high water mark for the _message queue_
diff --git a/doc/zmq_recv.txt b/doc/zmq_recv.txt
index 879d62a..b93f2a5 100644
--- a/doc/zmq_recv.txt
+++ b/doc/zmq_recv.txt
@@ -29,6 +29,23 @@ associated with 'socket', the _zmq_recv()_ function shall fail with 'errno' set
to EAGAIN.
+Multi-part messages
+~~~~~~~~~~~~~~~~~~~
+A 0MQ message is composed of 1 to N message parts; each message part is an
+independent 'zmq_msg_t' in its own right. Consequently, wherever this
+documentation uses the term _message_ it may be substituted for _message part_.
+
+An application wishing to determine if a message is composed of multiple parts
+does so by retrieving the value of the _ZMQ_RCVMORE_ socket option on the
+'socket' it is receiving the message from. If there are no message parts to
+follow, or if the message is not composed of multiple parts, _ZMQ_RCVMORE_
+shall report a value of zero. Otherwise, _ZMQ_RCVMORE_ shall report a value of
+1, indicating that more message parts are to follow.
+
+0MQ shall ensure the atomicity of a multi-part message; peers shall receive
+either all _message parts_ of a multi-part message or none at all.
+
+
RETURN VALUE
------------
The _zmq_recv()_ function shall return zero if successful. Otherwise it shall
@@ -47,7 +64,7 @@ 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*::
-The associated context was terminted.
+The 0MQ 'context' associated with the specified 'socket' was terminated.
EXAMPLE
@@ -63,10 +80,28 @@ rc = zmq_recv (socket, &msg, 0);
assert (rc == 0);
----
+.Receiving a multi-part message
+----
+int64_t 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 dequeued 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, sizeof more);
+ assert (rc == 0);
+} while (more);
+----
+
SEE ALSO
--------
linkzmq:zmq_send[3]
+linkzmq:zmq_getsockopt[3]
linkzmq:zmq_socket[7]
linkzmq:zmq[7]
diff --git a/doc/zmq_send.txt b/doc/zmq_send.txt
index 927bc1b..b05c73b 100644
--- a/doc/zmq_send.txt
+++ b/doc/zmq_send.txt
@@ -23,12 +23,34 @@ Specifies that the operation should be performed in non-blocking mode. If the
message cannot be queued on the underlying _message queue_ associated with
'socket', the _zmq_send()_ function shall fail with 'errno' set to EAGAIN.
+*ZMQ_SNDMORE*::
+Specifies that the message being sent is a multi-part message, and that further
+message parts are to follow. Refer to the section regarding multi-part messages
+below for a detailed description.
+
NOTE: A successful invocation of _zmq_send()_ does not indicate that the
message has been transmitted to the network, only that it has been queued on
the _message queue_ associated with the socket and 0MQ has assumed
responsibility for the message.
+Multi-part messages
+~~~~~~~~~~~~~~~~~~~
+A 0MQ message is composed of 1 to N message parts; each message part is an
+independent 'zmq_msg_t' in its own right. Consequently, wherever this
+documentation uses the term _message_ it may be substituted for _message part_.
+
+An application wishing to send a multi-part message does so by specifying the
+'ZMQ_SNDMORE' flag to _zmq_send()_. The presence of this flag indicates to 0MQ
+that the message being sent is a multi-part message and that more message parts
+are to follow. When the application wishes to send the final message part it
+does so by calling _zmq_send()_ without the 'ZMQ_SNDMORE' flag; this indicates
+that no more message parts are to follow. The total number of mess
+
+0MQ shall ensure the atomicity of a multi-part message; peers shall receive
+either all _message parts_ of a multi-part message or none at all.
+
+
RETURN VALUE
------------
The _zmq_send()_ function shall return zero if successful. Otherwise it shall
@@ -47,7 +69,7 @@ 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*::
-The associated context was terminted.
+The 0MQ 'context' associated with the specified 'socket' was terminated.
EXAMPLE
@@ -65,6 +87,15 @@ rc = zmq_send (socket, &msg, 0);
assert (rc == 0);
----
+.Sending a multi-part message
+----
+/* Send a multi-part message consisting of three parts to socket */
+rc = zmq_send (socket, &part1, ZMQ_SNDMORE);
+rc = zmq_send (socket, &part2, ZMQ_SNDMORE);
+/* Final part; no more parts to follow */
+rc = zmq_send (socket, &part3, 0);
+----
+
SEE ALSO
--------