table of contents
XS_SEND(3) | Crossroads I/O Manual | XS_SEND(3) |
NAME¶
xs_send - send a message part on a socket
SYNOPSIS¶
int xs_send (void *socket, void *buf, size_t len, int flags);
DESCRIPTION¶
The xs_send() function shall queue a message created from the buffer referenced by the buf and len arguments. The flags argument is a combination of the flags defined below:
XS_DONTWAIT
XS_SNDMORE
Note
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 socket and Crossroads have assumed responsibility for the message.
Multi-part messages¶
A Crossroads message is composed of 1 or more message parts. Crossroads 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 except by available memory.
An application that sends multipart messages must use the XS_SNDMORE flag when sending each message part except the final one.
RETURN VALUE¶
The xs_send() 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
ENOTSUP
EFSM
ETERM
ENOTSOCK
EINTR
EXAMPLE¶
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);
SEE ALSO¶
Applications that wish to use zero-copy messaging must use xs_sendmsg(3) instead of xs_send().
xs_recv(3) xs_socket(7) xs(7)
AUTHORS¶
This man page was written by Martin Sustrik <sustrik@250bpm.com[1]>, Martin Lucina <martin@lucina.net[2]> and Pieter Hintjens <ph@imatix.com[3]>.
NOTES¶
- 1.
- sustrik@250bpm.com
- 2.
- martin@lucina.net
- 3.
- ph@imatix.com
06/13/2012 | Crossroads I/O 1.2.0 |