Unverified Commit f24c019e authored by Luca Boccassi's avatar Luca Boccassi Committed by GitHub

Merge pull request #3686 from trya/doc_sock_block

Fix documentation about sockets blocking on send operations
parents 8d34332f 4378d712
...@@ -23,10 +23,11 @@ argument to be sent to the socket referenced by the 'socket' argument. The ...@@ -23,10 +23,11 @@ argument to be sent to the socket referenced by the 'socket' argument. The
'flags' argument is a combination of the flags defined below: 'flags' argument is a combination of the flags defined below:
*ZMQ_DONTWAIT*:: *ZMQ_DONTWAIT*::
For socket types (DEALER, PUSH) that block when there are no available peers For socket types (DEALER, PUSH) that block (either with ZMQ_IMMEDIATE option set
(or all peers have full high-water mark), specifies that the operation should and no peer available, or all peers having full high-water mark), specifies that
be performed in non-blocking mode. If the message cannot be queued on the the operation should be performed in non-blocking mode. If the message cannot be
'socket', the _zmq_msg_send()_ function shall fail with 'errno' set to EAGAIN. queued on the 'socket', the _zmq_msg_send()_ function shall 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
......
...@@ -19,10 +19,11 @@ referenced by the 'buf' and 'len' arguments. The 'flags' argument is ...@@ -19,10 +19,11 @@ referenced by the 'buf' and 'len' arguments. The 'flags' argument is
a combination of the flags defined below: a combination of the flags defined below:
*ZMQ_DONTWAIT*:: *ZMQ_DONTWAIT*::
For socket types (DEALER, PUSH) that block when there are no available peers For socket types (DEALER, PUSH) that block (either with ZMQ_IMMEDIATE option set
(or all peers have full high-water mark), specifies that the operation should and no peer available, or all peers having full high-water mark), specifies that
be performed in non-blocking mode. If the message cannot be queued on the the operation should be performed in non-blocking mode. If the message cannot be
'socket', the _zmq_send()_ function shall fail with 'errno' set to EAGAIN. queued on the 'socket', the _zmq_send()_ function shall 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
......
...@@ -20,10 +20,11 @@ to be constant-memory and will therefore not be copied or deallocated ...@@ -20,10 +20,11 @@ to be constant-memory and will therefore not be copied or deallocated
in any way. The 'flags' argument is a combination of the flags defined below: in any way. The 'flags' argument is a combination of the flags defined below:
*ZMQ_DONTWAIT*:: *ZMQ_DONTWAIT*::
For socket types (DEALER, PUSH) that block when there are no available peers For socket types (DEALER, PUSH) that block (either with ZMQ_IMMEDIATE option set
(or all peers have full high-water mark), specifies that the operation should and no peer available, or all peers having full high-water mark), specifies that
be performed in non-blocking mode. If the message cannot be queued on the the operation should be performed in non-blocking mode. If the message cannot be
'socket', the _zmq_send_const()_ function shall fail with 'errno' set to EAGAIN. queued on the 'socket', the _zmq_send_const()_ function shall 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
......
...@@ -19,10 +19,11 @@ argument to be sent to the socket referenced by the 'socket' argument. The ...@@ -19,10 +19,11 @@ argument to be sent to the socket referenced by the 'socket' argument. The
'flags' argument is a combination of the flags defined below: 'flags' argument is a combination of the flags defined below:
*ZMQ_DONTWAIT*:: *ZMQ_DONTWAIT*::
For socket types (DEALER, PUSH) that block when there are no available peers For socket types (DEALER, PUSH) that block (either with ZMQ_IMMEDIATE option set
(or all peers have full high-water mark), specifies that the operation should and no peer available, or all peers having full high-water mark), specifies that
be performed in non-blocking mode. If the message cannot be queued on the the operation should be performed in non-blocking mode. If the message cannot be
'socket', the _zmq_sendmsg()_ function shall fail with 'errno' set to EAGAIN. queued on the 'socket', the _zmq_sendmsg()_ function shall 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
......
...@@ -85,14 +85,15 @@ the 'ZMQ_CLIENT'. ...@@ -85,14 +85,15 @@ the 'ZMQ_CLIENT'.
If the 'ZMQ_CLIENT' socket has established a connection, linkzmq:zmq_send[3] If the 'ZMQ_CLIENT' socket has established a connection, linkzmq:zmq_send[3]
will accept messages, queue them, and send them as rapidly as the network will accept messages, queue them, and send them as rapidly as the network
allows. The outgoing buffer limit is defined by the high water mark for the allows. The outgoing buffer limit is defined by the high water mark for the
socket. If the outgoing buffer is full, or if there is no connected peer, socket. If the outgoing buffer is full, or, for connection-oriented transports,
linkzmq:zmq_send[3] will block, by default. The 'ZMQ_CLIENT' socket will not if the ZMQ_IMMEDIATE option is set and there is no connected peer,
drop messages. linkzmq:zmq_send[3] will block.
The 'ZMQ_CLIENT' socket will not drop messages.
When a 'ZMQ_CLIENT' socket is connected to multiple 'ZMQ_SERVER' sockets, When a 'ZMQ_CLIENT' socket is connected to multiple 'ZMQ_SERVER' sockets,
outgoing messages are distributed between connected peers on a round-robin outgoing messages are distributed between connected peers on a round-robin
basis. Likewise, the 'ZMQ_CLIENT' socket receives messages fairly from each basis. Likewise, the 'ZMQ_CLIENT' socket receives messages fairly from each
connected peer. This usage is sensible only for stateless protocols. connected peer. This usage is sensible only for stateless protocols.
'ZMQ_CLIENT' sockets are threadsafe and can be used from multiple threads 'ZMQ_CLIENT' sockets are threadsafe and can be used from multiple threads
at the same time. Note that replies from a 'ZMQ_SERVER' socket will go to at the same time. Note that replies from a 'ZMQ_SERVER' socket will go to
...@@ -128,7 +129,7 @@ a message to a given 'ZMQ_CLIENT' peer the application must set the peer's ...@@ -128,7 +129,7 @@ a message to a given 'ZMQ_CLIENT' peer the application must set the peer's
If the 'routing_id' is not specified, or does not refer to a connected client If the 'routing_id' is not specified, or does not refer to a connected client
peer, the send call will fail with EHOSTUNREACH. If the outgoing buffer for peer, the send call will fail with EHOSTUNREACH. If the outgoing buffer for
the client peer is full, the send call shall block, unless ZMQ_DONT_WAIT is the client peer is full, the send call shall block, unless ZMQ_DONTWAIT is
used in the send, in which case it shall fail with EAGAIN. The 'ZMQ_SERVER' used in the send, in which case it shall fail with EAGAIN. The 'ZMQ_SERVER'
socket shall not drop messages in any case. socket shall not drop messages in any case.
...@@ -307,10 +308,11 @@ downstream _nodes_. The _zmq_recv()_ function is not implemented for this ...@@ -307,10 +308,11 @@ downstream _nodes_. The _zmq_recv()_ function is not implemented for this
socket type. socket type.
When a 'ZMQ_PUSH' socket enters the 'mute' state due to having reached the When a 'ZMQ_PUSH' socket enters the 'mute' state due to having reached the
high water mark for all downstream _nodes_, or if there are no downstream high water mark for all downstream _nodes_, or, for connection-oriented transports,
_nodes_ at all, then any linkzmq:zmq_send[3] operations on the socket shall if the ZMQ_IMMEDIATE option is set and there are no downstream _nodes_ at all,
block until the mute state ends or at least one downstream _node_ then any linkzmq:zmq_send[3] operations on the socket shall block until the mute
becomes available for sending; messages are not discarded. state ends or at least one downstream _node_ becomes available for sending;
messages are not discarded.
[horizontal] [horizontal]
.Summary of ZMQ_PUSH characteristics .Summary of ZMQ_PUSH characteristics
...@@ -354,7 +356,8 @@ time. No message routing or filtering is performed on messages sent over a ...@@ -354,7 +356,8 @@ time. No message routing or filtering is performed on messages sent over a
'ZMQ_PAIR' socket. 'ZMQ_PAIR' socket.
When a 'ZMQ_PAIR' socket enters the 'mute' state due to having reached the When a 'ZMQ_PAIR' socket enters the 'mute' state due to having reached the
high water mark for the connected peer, or if no peer is connected, then high water mark for the connected peer, or, for connection-oriented transports,
if the ZMQ_IMMEDIATE option is set and there is no connected peer, then
any linkzmq:zmq_send[3] operations on the socket shall block until the peer any linkzmq:zmq_send[3] operations on the socket shall block until the peer
becomes available for sending; messages are not discarded. becomes available for sending; messages are not discarded.
...@@ -437,9 +440,9 @@ sequence of _zmq_send(request)_ and subsequent _zmq_recv(reply)_ calls. Each ...@@ -437,9 +440,9 @@ sequence of _zmq_send(request)_ and subsequent _zmq_recv(reply)_ calls. Each
request sent is round-robined among all _services_, and each reply received is request sent is round-robined among all _services_, and each reply received is
matched with the last issued request. matched with the last issued request.
If no services are available, then any send operation on the socket shall For connection-oriented transports, If the ZMQ_IMMEDIATE option is set and there
block until at least one _service_ becomes available. The REQ socket shall is no service available, then any send operation on the socket shall block until
not discard messages. at least one _service_ becomes available. The REQ socket shall not discard messages.
[horizontal] [horizontal]
.Summary of ZMQ_REQ characteristics .Summary of ZMQ_REQ characteristics
...@@ -476,10 +479,10 @@ request/reply sockets. Each message sent is round-robined among all connected ...@@ -476,10 +479,10 @@ request/reply sockets. Each message sent is round-robined among all connected
peers, and each message received is fair-queued from all connected peers. peers, and each message received is fair-queued from all connected peers.
When a 'ZMQ_DEALER' socket enters the 'mute' state due to having reached the When a 'ZMQ_DEALER' socket enters the 'mute' state due to having reached the
high water mark for all peers, or if there are no peers at all, then any high water mark for all peers, or, for connection-oriented transports, if the
linkzmq:zmq_send[3] operations on the socket shall block until the mute ZMQ_IMMEDIATE option is set and there are no peers at all, then any
state ends or at least one peer becomes available for sending; messages are not linkzmq:zmq_send[3] operations on the socket shall block until the mute state
discarded. ends or at least one peer becomes available for sending; messages are not discarded.
When a 'ZMQ_DEALER' socket is connected to a 'ZMQ_REP' socket each message sent When a 'ZMQ_DEALER' socket is connected to a 'ZMQ_REP' socket each message sent
must consist of an empty message part, the _delimiter_, followed by one or more must consist of an empty message part, the _delimiter_, followed by one or more
......
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