Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
NN_SENDMSG(3)			  nanomsg 1.1.5 		   NN_SENDMSG(3)

NAME
     nn_sendmsg - fine-grained alternative to nn_send

SYNOPSIS
     #include <nanomsg/nn.h>

     int nn_sendmsg (int s, const struct nn_msghdr *msghdr, int flags);

DESCRIPTION
     Sends  data  specified by msghdr parameter to socket s along with any addi-
     tional control data. msghdr structure  should  be	nullified  before  being
     used.

     Structure nn_msghdr contains at least following members:

	 struct nn_iovec *msg_iov;
	 int msg_iovlen;
	 void *msg_control;
	 size_t msg_controllen;

     msg_iov  points to a scatter array of buffers to send. msg_iovlen specifies
     the size of the array.

     msg_control points to the buffer containing control information to be asso-
     ciated with the message being sent. msg_controllen specifies the length  of
     the  buffer.  If there's no control information to send, msg_control should
     be set to NULL. For detailed discussion of how to set  control  data  check
     nn_cmsg(3) man page.

     Structure	nn_iovec defines one element in the scatter array (i.e. a buffer
     to send to the socket) and contains following members:

	 void *iov_base;
	 size_t iov_len;

     Alternatively, to send a buffer allocated by  nn_allocmsg(3)  function  set
     iov_base  to  point to the pointer to the buffer and iov_len to NN_MSG con-
     stant. In this case a successful call to  nn_sendmsg  will  deallocate  the
     buffer.  Trying to deallocate it afterwards will result in undefined behav-
     iour. Also, scatter array in nn_msghdr structure can contain only one  ele-
     ment in this case.

     To which of the peers will the message be sent to is determined by the par-
     ticular socket type.

     The flags argument is a combination of the flags defined below:

     NN_DONTWAIT
	 Specifies  that the operation should be performed in non-blocking mode.
	 If the message cannot be sent straight away,  the  function  will  fail
	 with errno set to EAGAIN.

RETURN VALUE
     If the function succeeds number of bytes in the message is returned. Other-
     wise,  -1	is returned and errno is set to to one of the values defined be-
     low.

ERRORS
     EINVAL
	 Either msghdr is NULL, there are multiple scatter buffers but length is
	 set to NN_MSG for one of them, or the sum of  iov_len	values	for  the
	 scatter buffers overflows size_t. These are early checks and no pre-al-
	 located message is freed in this case.

     EMSGSIZE
	 msghdr->msg_iovlen is negative. This is an early check and no pre-allo-
	 cated message is freed in this case.

     EFAULT
	 The  supplied pointer for the pre-allocated message buffer or the scat-
	 ter buffer is NULL, or the length for the scatter buffer is 0.

     EBADF
	 The provided socket is invalid.

     ENOTSUP
	 The operation is not supported by this socket type.

     EFSM
	 The operation cannot be performed on this socket at the moment  because
	 socket  is  not  in  the  appropriate	state. This error may occur with
	 socket types that switch between several states.

     EAGAIN
	 Non-blocking mode was requested and the message cannot be sent  at  the
	 moment.

     EINTR
	 The  operation  was interrupted by delivery of a signal before the mes-
	 sage was sent.

     ETIMEDOUT
	 Individual socket types may define their own specific timeouts. If such
	 timeout is hit this error will be returned.

     ETERM
	 The library is terminating.

EXAMPLE
     Usage of multiple scatter buffers:

	 struct nn_msghdr hdr;
	 struct nn_iovec iov [2];

	 iov [0].iov_base = "Hello";
	 iov [0].iov_len = 5;
	 iov [1].iov_base = "World";
	 iov [1].iov_len = 5;
	 memset (&hdr, 0, sizeof (hdr));
	 hdr.msg_iov = iov;
	 hdr.msg_iovlen = 2;
	 nn_sendmsg (s, &hdr, 0);

     Usage of a single message:

	 void *msg;
	 struct nn_msghdr hdr;
	 struct nn_iovec iov;

	 msg = nn_allocmsg(12, 0);
	 strcpy(msg, "Hello World");
	 iov.iov_base = &msg;
	 iov.iov_len = NN_MSG;
	 memset (&hdr, 0, sizeof (hdr));
	 hdr.msg_iov = &iov;
	 hdr.msg_iovlen = 1;
	 nn_sendmsg (s, &hdr, 0);

SEE ALSO
     nn_send(3) nn_recvmsg(3) nn_allocmsg(3) nn_freemsg(3) nn_cmsg(3) nanomsg(7)

AUTHORS
     Martin Sustrik <sustrik@250bpm.com>

				   2018-10-15			   NN_SENDMSG(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=nn_sendmsg&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help