Commit a154ef69 authored by Martin Sustrik's avatar Martin Sustrik

Man pages for send & recv function brought up to date

Signed-off-by: 's avatarMartin Sustrik <sustrik@250bpm.com>
parent 7e125117
...@@ -2,7 +2,8 @@ MAN3 = zmq_bind.3 zmq_close.3 zmq_connect.3 zmq_init.3 \ ...@@ -2,7 +2,8 @@ MAN3 = zmq_bind.3 zmq_close.3 zmq_connect.3 zmq_init.3 \
zmq_msg_close.3 zmq_msg_copy.3 zmq_msg_data.3 zmq_msg_init.3 \ zmq_msg_close.3 zmq_msg_copy.3 zmq_msg_data.3 zmq_msg_init.3 \
zmq_msg_init_data.3 zmq_msg_init_size.3 zmq_msg_move.3 zmq_msg_size.3 \ zmq_msg_init_data.3 zmq_msg_init_size.3 zmq_msg_move.3 zmq_msg_size.3 \
zmq_poll.3 zmq_recv.3 zmq_send.3 zmq_setsockopt.3 zmq_socket.3 \ zmq_poll.3 zmq_recv.3 zmq_send.3 zmq_setsockopt.3 zmq_socket.3 \
zmq_strerror.3 zmq_term.3 zmq_version.3 zmq_getsockopt.3 zmq_errno.3 zmq_strerror.3 zmq_term.3 zmq_version.3 zmq_getsockopt.3 zmq_errno.3 \
zmq_sendmsg.3 zmq_recvmsg.3
MAN7 = zmq.7 zmq_tcp.7 zmq_pgm.7 zmq_epgm.7 zmq_inproc.7 zmq_ipc.7 MAN7 = zmq.7 zmq_tcp.7 zmq_pgm.7 zmq_epgm.7 zmq_inproc.7 zmq_ipc.7
MAN_DOC = $(MAN1) $(MAN3) $(MAN7) MAN_DOC = $(MAN1) $(MAN3) $(MAN7)
......
...@@ -9,30 +9,29 @@ zmq_recv - receive a message from a socket ...@@ -9,30 +9,29 @@ zmq_recv - receive a message from a socket
SYNOPSIS 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 DESCRIPTION
----------- -----------
The _zmq_recv()_ function shall receive a message from the socket referenced by The _zmq_recv()_ function shall receive a message from the socket referenced
the 'socket' argument and store it in the message referenced by the 'msg' by the 'socket' argument and store it in the buffer referenced by the 'buf'
argument. Any content previously stored in 'msg' shall be properly deallocated. argument. Any bytes exceeding the length specified by the 'len' argument shall
If there are no messages available on the specified 'socket' the _zmq_recv()_ be truncated. If there are no messages available on the specified 'socket'
function shall block until the request can be satisfied. The 'flags' argument the _zmq_recv()_ function shall block until the request can be satisfied.
is a combination of the flags defined below: The 'flags' argument is a combination of the flags defined below:
*ZMQ_DONTWAIT*:: *ZMQ_DONTWAIT*::
Specifies that the operation should be performed in non-blocking mode. If there 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 are no messages available on the specified 'socket', the _zmq_recv()_
shall fail with 'errno' set to EAGAIN. function shall fail with 'errno' set to EAGAIN.
Multi-part messages Multi-part messages
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
A 0MQ message is composed of 1 or more message parts; each message part is an A 0MQ message is composed of 1 or more message parts. 0MQ ensures atomic
independent 'zmq_msg_t' in its own right. 0MQ ensures atomic delivery of delivery of messages; peers shall receive either all _message parts_ of a
messages; peers shall receive either all _message parts_ of a message or none message or none at all.
at all.
The total number of message parts is unlimited. 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 ...@@ -46,8 +45,10 @@ shall report a value of zero. Otherwise, _ZMQ_RCVMORE_ shall report a value of
RETURN VALUE RETURN VALUE
------------ ------------
The _zmq_recv()_ function shall return zero if successful. Otherwise it shall The _zmq_recv()_ function shall return number of bytes in the message
return `-1` and set 'errno' to one of the values defined below. 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 ERRORS
...@@ -57,8 +58,8 @@ Non-blocking mode was requested and no messages are available at the moment. ...@@ -57,8 +58,8 @@ Non-blocking mode was requested and no messages are available at the moment.
*ENOTSUP*:: *ENOTSUP*::
The _zmq_recv()_ operation is not supported by this socket type. The _zmq_recv()_ operation is not supported by this socket type.
*EFSM*:: *EFSM*::
The _zmq_recv()_ operation cannot be performed on this socket at the moment due The _zmq_recv()_ operation cannot be performed on this socket at the moment
to the socket not being in the appropriate state. This error may occur with 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 socket types that switch between several states, such as ZMQ_REP. See the
_messaging patterns_ section of linkzmq:zmq_socket[3] for more information. _messaging patterns_ section of linkzmq:zmq_socket[3] for more information.
*ETERM*:: *ETERM*::
...@@ -68,48 +69,23 @@ The provided 'socket' was invalid. ...@@ -68,48 +69,23 @@ The provided 'socket' was invalid.
*EINTR*:: *EINTR*::
The operation was interrupted by delivery of a signal before a message was The operation was interrupted by delivery of a signal before a message was
available. available.
*EFAULT*::
The message passed to the function was invalid.
EXAMPLE EXAMPLE
------- -------
.Receiving a message from a socket .Receiving a message from a socket
---- ----
/* Create an empty 0MQ message */ char buf [256];
zmq_msg_t msg; nbytes = zmq_recv (socket, buf, 256, 0);
int rc = zmq_msg_init (&msg); assert (nbytes != -1);
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);
---- ----
SEE ALSO SEE ALSO
-------- --------
linkzmq:zmq_recvmsg[3]
linkzmq:zmq_send[3] linkzmq:zmq_send[3]
linkzmq:zmq_sendmsg[3]
linkzmq:zmq_getsockopt[3] linkzmq:zmq_getsockopt[3]
linkzmq:zmq_socket[7] linkzmq:zmq_socket[7]
linkzmq:zmq[7] linkzmq:zmq[7]
......
zmq_recvmsg(3)
==============
NAME
----
zmq_recvmsg - receive a message from a socket
SYNOPSIS
--------
*int zmq_recvmsg (void '*socket', zmq_msg_t '*msg', int 'flags');*
DESCRIPTION
-----------
The _zmq_recvmsg()_ 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_recvmsg()_
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_recvmsg()_
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.
The total number of message parts is unlimited.
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.
RETURN VALUE
------------
The _zmq_recvmsg()_ function shall return number of bytes in the message
if successful. Otherwise it shall return `-1` and set 'errno' to one of the
values defined below.
ERRORS
------
*EAGAIN*::
Non-blocking mode was requested and no messages are available at the moment.
*ENOTSUP*::
The _zmq_recvmsg()_ operation is not supported by this socket type.
*EFSM*::
The _zmq_recvmsg()_ 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*::
The 0MQ 'context' associated with the specified 'socket' was terminated.
*ENOTSOCK*::
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_recvmsg (socket, &msg, 0);
assert (rc != -1);
/* 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_recvmsg (socket, &part, 0);
assert (rc != -1);
/* 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);
----
SEE ALSO
--------
linkzmq:zmq_recv[3]
linkzmq:zmq_send[3]
linkzmq:zmq_sendmsg[3]
linkzmq:zmq_getsockopt[3]
linkzmq:zmq_socket[7]
linkzmq:zmq[7]
AUTHORS
-------
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and
Martin Lucina <mato@kotelna.sk>.
...@@ -9,19 +9,19 @@ zmq_send - send a message on a socket ...@@ -9,19 +9,19 @@ zmq_send - send a message on a socket
SYNOPSIS SYNOPSIS
-------- --------
*int zmq_send (void '*socket', zmq_msg_t '*msg', int 'flags');* *int zmq_send (void '*socket', void '*buf', size_t 'len', int 'flags');*
DESCRIPTION DESCRIPTION
----------- -----------
The _zmq_send()_ function shall queue the message referenced by the 'msg' The _zmq_send()_ function shall queue a message created from the buffer
argument to be sent to the socket referenced by the 'socket' argument. The referenced by the 'buf' and 'len' arguments. The 'flags' argument is
'flags' argument is a combination of the flags defined below: a combination of the flags defined below:
*ZMQ_DONTWAIT*:: *ZMQ_DONTWAIT*::
Specifies that the operation should be performed in non-blocking mode. If the Specifies that the operation should be performed in non-blocking mode. If the
message cannot be queued on the 'socket', the _zmq_send()_ function shall fail message cannot be queued on the 'socket', the _zmq_send()_ function shall
with 'errno' set to EAGAIN. fail with 'errno' set to EAGAIN.
*ZMQ_SNDMORE*:: *ZMQ_SNDMORE*::
Specifies that the message being sent is a multi-part message, and that further Specifies that the message being sent is a multi-part message, and that further
...@@ -32,10 +32,6 @@ below for a detailed description. ...@@ -32,10 +32,6 @@ below for a detailed description.
Specifies that the message being sent is a label. Labels are used internally Specifies that the message being sent is a label. Labels are used internally
by 0MQ. by 0MQ.
The _zmq_msg_t_ structure passed to _zmq_send()_ is nullified during the call.
If you want to send the same message to multiple sockets you have to copy it
using (e.g. using _zmq_msg_copy()_).
NOTE: A successful invocation of _zmq_send()_ does not indicate that the 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 message has been transmitted to the network, only that it has been queued on
the 'socket' and 0MQ has assumed responsibility for the message. the 'socket' and 0MQ has assumed responsibility for the message.
...@@ -43,25 +39,26 @@ the 'socket' and 0MQ has assumed responsibility for the message. ...@@ -43,25 +39,26 @@ the 'socket' and 0MQ has assumed responsibility for the message.
Multi-part messages Multi-part messages
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
A 0MQ message is composed of 1 or more message parts; each message part is an A 0MQ message is composed of 1 or more message parts; each invocation of
independent 'zmq_msg_t' in its own right. 0MQ ensures atomic delivery of _zmq_send()_ creates an independent message part in its own right. 0MQ ensures
messages; peers shall receive either all _message parts_ of a message or none atomic delivery of messages; peers shall receive either all _message parts_ of
at all. a message or none at all.
The total number of message parts is unlimited. The total number of message parts is unlimited.
An application wishing to send a multi-part message does so by specifying the 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 'ZMQ_SNDMORE' flag to _zmq_send()_. The presence of this flag indicates to
that the message being sent is a multi-part message and that more message parts 0MQ that the message being sent is a multi-part message and that more message
are to follow. When the application wishes to send the final message part it parts are to follow. When the application wishes to send the final message part
does so by calling _zmq_send()_ without the 'ZMQ_SNDMORE' flag; this indicates it does so by calling _zmq_send()_ without the 'ZMQ_SNDMORE' flag; this
that no more message parts are to follow. indicates that no more message parts are to follow.
RETURN VALUE RETURN VALUE
------------ ------------
The _zmq_send()_ function shall return zero if successful. Otherwise it shall The _zmq_send()_ function shall return number of bytes in the message
return `-1` and set 'errno' to one of the values defined below. if successful. Otherwise it shall return `-1` and set 'errno' to one of the
values defined below.
ERRORS ERRORS
...@@ -71,8 +68,8 @@ Non-blocking mode was requested and the message cannot be sent at the moment. ...@@ -71,8 +68,8 @@ Non-blocking mode was requested and the message cannot be sent at the moment.
*ENOTSUP*:: *ENOTSUP*::
The _zmq_send()_ operation is not supported by this socket type. The _zmq_send()_ operation is not supported by this socket type.
*EFSM*:: *EFSM*::
The _zmq_send()_ operation cannot be performed on this socket at the moment due The _zmq_send()_ operation cannot be performed on this socket at the moment
to the socket not being in the appropriate state. This error may occur with 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 socket types that switch between several states, such as ZMQ_REP. See the
_messaging patterns_ section of linkzmq:zmq_socket[3] for more information. _messaging patterns_ section of linkzmq:zmq_socket[3] for more information.
*ETERM*:: *ETERM*::
...@@ -82,38 +79,27 @@ The provided 'socket' was invalid. ...@@ -82,38 +79,27 @@ The provided 'socket' was invalid.
*EINTR*:: *EINTR*::
The operation was interrupted by delivery of a signal before the message was The operation was interrupted by delivery of a signal before the message was
sent. sent.
*EFAULT*::
Invalid message.
EXAMPLE EXAMPLE
------- -------
.Filling in a message and sending it to a socket
----
/* Create a new message, allocating 6 bytes for message content */
zmq_msg_t msg;
int rc = zmq_msg_init_size (&msg, 6);
assert (rc == 0);
/* Fill in message content with 'AAAAAA' */
memset (zmq_msg_data (&msg), 'A', 6);
/* Send the message to the socket */
rc = zmq_send (socket, &msg, 0);
assert (rc == 0);
----
.Sending a multi-part message .Sending a multi-part message
---- ----
/* Send a multi-part message consisting of three parts to socket */ /* Send a multi-part message consisting of three parts to socket */
rc = zmq_send (socket, &part1, ZMQ_SNDMORE); rc = zmq_send (socket, "ABC", 3, ZMQ_SNDMORE);
rc = zmq_send (socket, &part2, ZMQ_SNDMORE); assert (rc == 3);
rc = zmq_send (socket, "DEFGH", 5, ZMQ_SNDMORE);
assert (rc == 5);
/* Final part; no more parts to follow */ /* Final part; no more parts to follow */
rc = zmq_send (socket, &part3, 0); rc = zmq_send (socket, "JK", 2, 0);
assert (rc == 2);
---- ----
SEE ALSO SEE ALSO
-------- --------
linkzmq:zmq_sendmsg[3]
linkzmq:zmq_recv[3] linkzmq:zmq_recv[3]
linkzmq:zmq_recvmsg[3]
linkzmq:zmq_socket[7] linkzmq:zmq_socket[7]
linkzmq:zmq[7] linkzmq:zmq[7]
......
zmq_sendmsg(3)
==============
NAME
----
zmq_sendmsg - send a message on a socket
SYNOPSIS
--------
*int zmq_sendmsg (void '*socket', zmq_msg_t '*msg', int 'flags');*
DESCRIPTION
-----------
The _zmq_send()_ function shall queue the message referenced by the 'msg'
argument to be sent to the socket referenced by the 'socket' argument. 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 the
message cannot be queued on the 'socket', the _zmq_sendmsg()_ 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.
*ZMQ_SNDLABEL*::
Specifies that the message being sent is a label. Labels are used internally
by 0MQ.
The _zmq_msg_t_ structure passed to _zmq_sendmsg()_ is nullified during the
call. If you want to send the same message to multiple sockets you have to copy
it using (e.g. using _zmq_msg_copy()_).
NOTE: A successful invocation of _zmq_sendmsg()_ does not indicate that the
message has been transmitted to the network, only that it has been queued on
the 'socket' and 0MQ has assumed responsibility for the message.
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.
The total number of message parts is unlimited.
An application wishing to send a multi-part message does so by specifying the
'ZMQ_SNDMORE' flag to _zmq_sendmsg()_. 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_sendmsg()_ without the 'ZMQ_SNDMORE' flag; this
indicates that no more message parts are to follow.
RETURN VALUE
------------
The _zmq_sendmsg()_ function shall return number of bytes in the message
if successful. Otherwise it shall return `-1` and set 'errno' to one of the
values defined below.
ERRORS
------
*EAGAIN*::
Non-blocking mode was requested and the message cannot be sent at the moment.
*ENOTSUP*::
The _zmq_sendmsg()_ operation is not supported by this socket type.
*EFSM*::
The _zmq_sendmsg()_ 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*::
The 0MQ 'context' associated with the specified 'socket' was terminated.
*ENOTSOCK*::
The provided 'socket' was invalid.
*EINTR*::
The operation was interrupted by delivery of a signal before the message was
sent.
*EFAULT*::
Invalid message.
EXAMPLE
-------
.Filling in a message and sending it to a socket
----
/* Create a new message, allocating 6 bytes for message content */
zmq_msg_t msg;
int rc = zmq_msg_init_size (&msg, 6);
assert (rc == 0);
/* Fill in message content with 'AAAAAA' */
memset (zmq_msg_data (&msg), 'A', 6);
/* Send the message to the socket */
rc = zmq_sendmsg (socket, &msg, 0);
assert (rc == 6);
----
.Sending a multi-part message
----
/* Send a multi-part message consisting of three parts to socket */
rc = zmq_sendmsg (socket, &part1, ZMQ_SNDMORE);
rc = zmq_sendmsg (socket, &part2, ZMQ_SNDMORE);
/* Final part; no more parts to follow */
rc = zmq_sendmsg (socket, &part3, 0);
----
SEE ALSO
--------
linkzmq:zmq_recv[3]
linkzmq:zmq_recv[3]
linkzmq:zmq_recvmsg[3]
linkzmq:zmq_socket[7]
linkzmq:zmq[7]
AUTHORS
-------
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and
Martin Lucina <mato@kotelna.sk>.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment