xs_send - send a message part on a socket
int xs_send (void *socket, void
*buf, size_t len, int
function shall queue a message created from the buffer
referenced by the buf
arguments. The flags
argument is a combination of the flags defined below:
Specifies that the operation should be performed in
non-blocking mode. If the message cannot be queued on the socket, the
xs_send() function shall fail with errno set to EAGAIN.
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.
A successful invocation of xs_send()
does not indicate that the message
has been transmitted to the network, only that it has been queued on the
and Crossroads have assumed responsibility for the message.
A Crossroads message is composed of 1 or more message parts. Crossroads ensures
atomic delivery of messages; peers shall receive either all message
of a message or none at all. The total number of message parts is
unlimited except by available memory.
An application that sends multipart messages must use the XS_SNDMORE
when sending each message part except the final one.
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.
Non-blocking mode was requested and the message cannot be
sent at the moment.
The xs_send() operation is not supported by this
The xs_send() 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 XS_REP. See the messaging patterns section of
xs_socket(3) for more information.
The context associated with the specified
socket was terminated.
The provided socket was invalid.
The operation was interrupted by delivery of a signal
before the message was sent.
Sending a multi-part message
/* Send a multi-part message consisting of three parts to socket */
rc = xs_send (socket, "ABC", 3, XS_SNDMORE);
assert (rc == 3);
rc = xs_send (socket, "DEFGH", 5, XS_SNDMORE);
assert (rc == 5);
/* Final part; no more parts to follow */
rc = xs_send (socket, "JK", 2, 0);
assert (rc == 2);
Applications that wish to use zero-copy messaging must use xs_sendmsg
instead of xs_send()
This man page was written by Martin Sustrik <
>, Martin Lucina <
> and Pieter Hintjens <