0
0
mirror of https://github.com/zeromq/libzmq.git synced 2024-12-27 15:41:05 +08:00

Fixed doc to clarify how label parts work

Signed-off-by: Pieter Hintjens <ph@imatix.com>
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
Pieter Hintjens 2011-09-03 09:02:56 +02:00 committed by Martin Sustrik
parent 9fb9fea633
commit 4138aca54b
6 changed files with 134 additions and 115 deletions

View File

@ -39,16 +39,11 @@ Default value:: N/A
Applicable socket types:: all Applicable socket types:: all
ZMQ_RCVMORE: More message parts to follow ZMQ_RCVLABEL: Inquires whether last message received was a label
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_RCVMORE' option shall return a boolean value indicating if the The 'ZMQ_RCVLABEL' option shall return True (1) if the message part last
multi-part message currently being read from the specified 'socket' has more received from the 'socket' was an address label. Otherwise, this option
message parts to follow. If there are no message parts to follow or if the shall return False (0).
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.
[horizontal] [horizontal]
Option value type:: int Option value type:: int
@ -57,10 +52,14 @@ Default value:: N/A
Applicable socket types:: all Applicable socket types:: all
ZMQ_RCVLABEL: Inquires whether last message received was a label ZMQ_RCVMORE: More message data parts to follow
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_RCVLABEL' option shall return a boolean value indicating whether the The 'ZMQ_RCVMORE' option shall return True (1) if the message part last
last message part received was a label. Labels are used internally by 0MQ. received from the 'socket' was a data part with more parts to follow. If there
are no data parts to follow, this option shall return False (0).
Refer to linkzmq:zmq_send[3] and linkzmq:zmq_recv[3] for a detailed description
of multi-part messages.
[horizontal] [horizontal]
Option value type:: int Option value type:: int

View File

@ -4,7 +4,7 @@ zmq_recv(3)
NAME NAME
---- ----
zmq_recv - receive a message from a socket zmq_recv - receive a message part from a socket
SYNOPSIS SYNOPSIS
@ -29,19 +29,18 @@ 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. 0MQ ensures atomic A 0MQ message is composed of 1 or more message parts, starting with zero or
more address 'label' parts, followed by 1 or more 'data' 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 delivery of messages; peers shall receive either all _message parts_ of a
message or none at all. message or none at all. The total number of message parts is unlimited except
by available memory.
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.
An application that processes multipart messages must use the _ZMQ_RCVMORE_
linkzmq:zmq_getsockopt[3] option after calling _zmq_recv()_ to determine if
there are further parts to receive. An application that manipulates address
labels must use _ZMQ_RCVLABEL_ to determine the zero or more label parts
that precede the data part(s).
RETURN VALUE RETURN VALUE
------------ ------------
@ -93,5 +92,6 @@ linkzmq:zmq[7]
AUTHORS AUTHORS
------- -------
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and +This man page was written by Martin Sustrik <sustrik@250bpm.com>, Martin
Martin Lucina <mato@kotelna.sk>. +Lucina <mato@kotelna.sk> and Pieter Hintjens <ph@imatix.com>.

View File

@ -4,7 +4,7 @@ zmq_recvmsg(3)
NAME NAME
---- ----
zmq_recvmsg - receive a message from a socket zmq_recvmsg - receive a message part from a socket
SYNOPSIS SYNOPSIS
@ -14,12 +14,12 @@ SYNOPSIS
DESCRIPTION DESCRIPTION
----------- -----------
The _zmq_recvmsg()_ function shall receive a message from the socket referenced The _zmq_recvmsg()_ function shall receive a message part from the socket
by the 'socket' argument and store it in the message referenced by the 'msg' referenced by the 'socket' argument and store it in the message referenced by
argument. Any content previously stored in 'msg' shall be properly deallocated. the 'msg' argument. Any content previously stored in 'msg' shall be properly
If there are no messages available on the specified 'socket' the _zmq_recvmsg()_ deallocated. If there are no message parts available on the specified 'socket'
function shall block until the request can be satisfied. The 'flags' argument the _zmq_recvmsg()_ 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
@ -29,19 +29,18 @@ 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, starting with zero or
independent 'zmq_msg_t' in its own right. 0MQ ensures atomic delivery of more address 'label' parts, followed by 1 or more 'data' parts. Each message
messages; peers shall receive either all _message parts_ of a message or none part is an independent 'zmq_msg_t' in its own right. 0MQ ensures atomic
at all. 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 except
by available memory.
The total number of message parts is unlimited. An application that processes multipart messages must use the _ZMQ_RCVMORE_
linkzmq:zmq_getsockopt[3] option after calling _zmq_recvmsg()_ to determine if
An application wishing to determine if a message is composed of multiple parts there are further parts to receive. An application that manipulates address
does so by retrieving the value of the _ZMQ_RCVMORE_ socket option on the labels must use _ZMQ_RCVLABEL_ to determine the zero or more label parts
'socket' it is receiving the message from. If there are no message parts to that precede the data part(s).
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 RETURN VALUE
@ -120,5 +119,6 @@ linkzmq:zmq[7]
AUTHORS AUTHORS
------- -------
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and This man page was written by Martin Sustrik <sustrik@250bpm.com>, Martin
Martin Lucina <mato@kotelna.sk>. Lucina <mato@kotelna.sk> and Pieter Hintjens <ph@imatix.com>.

View File

@ -4,7 +4,7 @@ zmq_send(3)
NAME NAME
---- ----
zmq_send - send a message on a socket zmq_send - send a message part on a socket
SYNOPSIS SYNOPSIS
@ -23,15 +23,16 @@ 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 message cannot be queued on the 'socket', the _zmq_send()_ function shall
fail with 'errno' set to EAGAIN. fail with 'errno' set to EAGAIN.
*ZMQ_SNDLABEL*::
Specifies that the message part being sent is an address label, and that
further message parts are to follow. Refer to linkzmq:zmq_socket[3] for the
semantics of address labels in each socket pattern.
*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
message parts are to follow. Refer to the section regarding multi-part messages message parts are to follow. Refer to the section regarding multi-part messages
below for a detailed description. below for a detailed description.
*ZMQ_SNDLABEL*::
Specifies that the message being sent is a label. Labels are used internally
by 0MQ.
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.
@ -39,19 +40,16 @@ 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 invocation of A 0MQ message is composed of 1 or more message parts, starting with zero or
_zmq_send()_ creates an independent message part in its own right. 0MQ ensures more address 'label' parts, followed by 1 or more 'data' parts. Each message
atomic delivery of messages; peers shall receive either all _message parts_ of part is an independent 'zmq_msg_t' in its own right. 0MQ ensures atomic
a message or none at all. 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 except
by available memory.
The total number of message parts is unlimited. An application that sends multipart messages must use the _ZMQ_SNDMORE_ flag
when sending each data part except the final one. An application that sends
An application wishing to send a multi-part message does so by specifying the address labels must use _ZMQ_SNDLABEL_ when sending each label.
'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.
RETURN VALUE RETURN VALUE
@ -109,5 +107,6 @@ linkzmq:zmq[7]
AUTHORS AUTHORS
------- -------
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and +This man page was written by Martin Sustrik <sustrik@250bpm.com>, Martin
Martin Lucina <mato@kotelna.sk>. +Lucina <mato@kotelna.sk> and Pieter Hintjens <ph@imatix.com>.

View File

@ -4,7 +4,7 @@ zmq_sendmsg(3)
NAME NAME
---- ----
zmq_sendmsg - send a message on a socket zmq_sendmsg - send a message part on a socket
SYNOPSIS SYNOPSIS
@ -23,15 +23,16 @@ 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 message cannot be queued on the 'socket', the _zmq_sendmsg()_ function shall
fail with 'errno' set to EAGAIN. fail with 'errno' set to EAGAIN.
*ZMQ_SNDLABEL*::
Specifies that the message part being sent is an address 'label', and that
further message parts are to follow. Refer to linkzmq:zmq_socket[3] for the
semantics of address labels in each socket pattern.
*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
message parts are to follow. Refer to the section regarding multi-part messages message parts are to follow. Refer to the section regarding multi-part messages
below for a detailed description. 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 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 call. If you want to send the same message to multiple sockets you have to copy
it using (e.g. using _zmq_msg_copy()_). it using (e.g. using _zmq_msg_copy()_).
@ -43,20 +44,16 @@ 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, starting with zero or
independent 'zmq_msg_t' in its own right. 0MQ ensures atomic delivery of more address 'label' parts, followed by 1 or more 'data' parts. Each message
messages; peers shall receive either all _message parts_ of a message or none part is an independent 'zmq_msg_t' in its own right. 0MQ ensures atomic
at all. 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 except
The total number of message parts is unlimited. by available memory.
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.
An application that sends multipart messages must use the _ZMQ_SNDMORE_ flag
when sending each data part except the final one. An application that sends
address labels must use _ZMQ_SNDLABEL_ when sending each label.
RETURN VALUE RETURN VALUE
------------ ------------
@ -126,5 +123,6 @@ linkzmq:zmq[7]
AUTHORS AUTHORS
------- -------
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and +This man page was written by Martin Sustrik <sustrik@250bpm.com>, Martin
Martin Lucina <mato@kotelna.sk>. +Lucina <mato@kotelna.sk> and Pieter Hintjens <ph@imatix.com>.

View File

@ -52,15 +52,19 @@ from multiple threads except after migrating a socket from one thread to
another with a "full fence" memory barrier. another with a "full fence" memory barrier.
.Socket types .Socket types
The following sections present the socket types defined by 0MQ, grouped by the 0MQ defines several messaging patterns which encapsulate exact semantics of
general _messaging pattern_ which is built from related socket types. a particular topology. For example, publush-subscribe pattern defines data
distribution trees while request-reply defines networks of shared stateless
services. Each pattern defines several socket types (roles in the pattern).
The following sections present the socket types defined by 0MQ:
Request-reply pattern Request-reply pattern
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
The request-reply pattern is used for sending requests from a _client_ to one The request-reply pattern is used for sending requests from a _client_ to one
or more instances of a _service_, and receiving subsequent replies to each or more instances of a stateless _service_, and receiving subsequent replies
request sent. to each request sent.
ZMQ_REQ ZMQ_REQ
@ -77,6 +81,11 @@ any linkzmq:zmq_send[3] operations on the socket shall block until the
exceptional state ends or at least one _service_ becomes available for sending; exceptional state ends or at least one _service_ becomes available for sending;
messages are not discarded. messages are not discarded.
'ZMQ_REQ' socket adds a unique 'request ID' label to every outbound message.
When receiving a reply, it checks whether the 'request ID' of the reply matches
the last 'request ID' sent. If it does not, the message is silently dropped and
waiting for the reply is resumed.
[horizontal] [horizontal]
.Summary of ZMQ_REQ characteristics .Summary of ZMQ_REQ characteristics
Compatible peer sockets:: 'ZMQ_REP' Compatible peer sockets:: 'ZMQ_REP'
@ -99,6 +108,10 @@ When a 'ZMQ_REP' socket enters an exceptional state due to having reached the
high water mark for a _client_, then any replies sent to the _client_ in high water mark for a _client_, then any replies sent to the _client_ in
question shall be dropped until the exceptional state ends. question shall be dropped until the exceptional state ends.
'ZMQ_REP' socket strips all the labels from the incoming message, stores them
and passes the remaining data parts to the user. When user sends the reply,
the stored labels are re-attached to the reply.
[horizontal] [horizontal]
.Summary of ZMQ_REP characteristics .Summary of ZMQ_REP characteristics
Compatible peer sockets:: 'ZMQ_REQ' Compatible peer sockets:: 'ZMQ_REQ'
@ -110,8 +123,11 @@ ZMQ_HWM option action:: Drop
ZMQ_XREQ ZMQ_XREQ
^^^^^^^^ ^^^^^^^^
A socket of type 'ZMQ_XREQ' is an advanced pattern used for extending A socket of type 'ZMQ_XREQ' is a socket type underlying 'ZMQ_REQ'. It doesn't
request/reply sockets. Each message sent is load-balanced among all connected impose the strict order of sends and recvs as 'ZMQ_REQ' does and it is
intended for use in intermediate devices in request-reply topologies.
Each message sent is load-balanced 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_XREQ' socket enters an exceptional state due to having reached the When a 'ZMQ_XREQ' socket enters an exceptional state due to having reached the
@ -120,9 +136,7 @@ linkzmq:zmq_send[3] operations on the socket shall block until the exceptional
state ends or at least one peer becomes available for sending; messages are not state ends or at least one peer becomes available for sending; messages are not
discarded. discarded.
When a 'ZMQ_XREQ' socket is connected to a 'ZMQ_REP' socket each message sent 'ZMQ_XREQ' socket doesn't inspect or modify the message labels.
must consist of an empty message part, the _delimiter_, followed by one or more
_body parts_.
[horizontal] [horizontal]
.Summary of ZMQ_XREQ characteristics .Summary of ZMQ_XREQ characteristics
@ -135,27 +149,26 @@ ZMQ_HWM option action:: Block
ZMQ_XREP ZMQ_XREP
^^^^^^^^ ^^^^^^^^
A socket of type 'ZMQ_XREP' is an advanced pattern used for extending A socket of type 'ZMQ_XREP' is a socket type underlying 'ZMQ_REP'. It doesn't
request/reply sockets. When receiving messages a 'ZMQ_XREP' socket shall impose the strict order of sends and recvs as 'ZMQ_REQ' does and it is
prepend a message part containing the _identity_ of the originating peer to the intended for use in intermediate devices in request-reply topologies.
message before passing it to the application. Messages received are fair-queued
from among all connected peers. When sending messages a 'ZMQ_XREP' socket shall Messages received are fair-queued from among all connected peers. The outbound
remove the first part of the message and use it to determine the _identity_ of messages are routed to a specific peer, as explained below.
the peer the message shall be routed to. If the peer does not exist anymore
the message shall be silently discarded.
When a 'ZMQ_XREP' socket enters an exceptional state due to having reached the When a 'ZMQ_XREP' socket enters an exceptional 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 if there are no peers at all, then any
messages sent to the socket shall be dropped until the exceptional state ends. messages sent to the socket shall be dropped until the exceptional state ends.
Likewise, any messages routed to a non-existent peer or a peer for which the Likewise, any messages to be routed to a non-existent peer or a peer for which
individual high water mark has been reached shall also be dropped. the individual high water mark has been reached shall also be dropped.
When a 'ZMQ_REQ' socket is connected to a 'ZMQ_XREP' socket, in addition to the When receiving messages a 'ZMQ_XREP' socket attaches a label uniquely
_identity_ of the originating peer each message received shall contain an empty identifying the originating peer to the message before passing it to the
_delimiter_ message part. Hence, the entire structure of each received message application.
as seen by the application becomes: one or more _identity_ parts, _delimiter_
part, one or more _body parts_. When sending replies to a 'ZMQ_REQ' socket the When sending messages a 'ZMQ_XREP' socket removes the first label from the
application must include the _delimiter_ part. message and uses it to determine which the peer the message shall be routed to.
If the peer does not exist anymore the message is silently discarded.
[horizontal] [horizontal]
.Summary of ZMQ_XREP characteristics .Summary of ZMQ_XREP characteristics
@ -183,6 +196,8 @@ high water mark for a _subscriber_, then any messages that would be sent to the
_subscriber_ in question shall instead be dropped until the exceptional state _subscriber_ in question shall instead be dropped until the exceptional state
ends. The _zmq_send()_ function shall never block for this socket type. ends. The _zmq_send()_ function shall never block for this socket type.
This socket type doesn't use message labels.
[horizontal] [horizontal]
.Summary of ZMQ_PUB characteristics .Summary of ZMQ_PUB characteristics
Compatible peer sockets:: 'ZMQ_SUB', 'ZMQ_XSUB' Compatible peer sockets:: 'ZMQ_SUB', 'ZMQ_XSUB'
@ -200,6 +215,8 @@ any messages, use the 'ZMQ_SUBSCRIBE' option of linkzmq:zmq_setsockopt[3] to
specify which messages to subscribe to. The _zmq_send()_ function is not specify which messages to subscribe to. The _zmq_send()_ function is not
implemented for this socket type. implemented for this socket type.
This socket type doesn't use message labels.
[horizontal] [horizontal]
.Summary of ZMQ_SUB characteristics .Summary of ZMQ_SUB characteristics
Compatible peer sockets:: 'ZMQ_PUB', 'ZMQ_XPUB' Compatible peer sockets:: 'ZMQ_PUB', 'ZMQ_XPUB'
@ -216,6 +233,8 @@ in form of incoming messages. Subscription message is a byte 1 (for
subscriptions) or byte 0 (for unsubscriptions) followed by the subscription subscriptions) or byte 0 (for unsubscriptions) followed by the subscription
body. body.
This socket type doesn't use message labels.
[horizontal] [horizontal]
.Summary of ZMQ_XPUB characteristics .Summary of ZMQ_XPUB characteristics
Compatible peer sockets:: 'ZMQ_SUB', 'ZMQ_XSUB' Compatible peer sockets:: 'ZMQ_SUB', 'ZMQ_XSUB'
@ -231,6 +250,8 @@ Same as ZMQ_SUB except that you subscribe by sending subscription messages to
the socket. Subscription message is a byte 1 (for subscriptions) or byte 0 the socket. Subscription message is a byte 1 (for subscriptions) or byte 0
(for unsubscriptions) followed by the subscription body. (for unsubscriptions) followed by the subscription body.
This socket type doesn't use message labels.
[horizontal] [horizontal]
.Summary of ZMQ_XSUB characteristics .Summary of ZMQ_XSUB characteristics
Compatible peer sockets:: 'ZMQ_PUB', 'ZMQ_XPUB' Compatible peer sockets:: 'ZMQ_PUB', 'ZMQ_XPUB'
@ -261,7 +282,7 @@ _nodes_ at all, then any linkzmq:zmq_send[3] operations on the socket shall
block until the exceptional state ends or at least one downstream _node_ block until the exceptional state ends or at least one downstream _node_
becomes available for sending; messages are not discarded. becomes available for sending; messages are not discarded.
Deprecated alias: 'ZMQ_DOWNSTREAM'. This socket type doesn't use message labels.
[horizontal] [horizontal]
.Summary of ZMQ_PUSH characteristics .Summary of ZMQ_PUSH characteristics
@ -280,7 +301,7 @@ from upstream pipeline _nodes_. Messages are fair-queued from among all
connected upstream _nodes_. The _zmq_send()_ function is not implemented for connected upstream _nodes_. The _zmq_send()_ function is not implemented for
this socket type. this socket type.
Deprecated alias: 'ZMQ_UPSTREAM'. This socket type doesn't use message labels.
[horizontal] [horizontal]
.Summary of ZMQ_PULL characteristics .Summary of ZMQ_PULL characteristics
@ -309,6 +330,8 @@ high water mark for the connected peer, or if no peer is connected, 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.
This socket type doesn't use message labels.
NOTE: 'ZMQ_PAIR' sockets are experimental, and are currently missing several NOTE: 'ZMQ_PAIR' sockets are experimental, and are currently missing several
features such as auto-reconnection. features such as auto-reconnection.