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

  
 
  

home | help
PREFIX_ATTACH_MEM(3)	    libdill Library Functions	    PREFIX_ATTACH_MEM(3)

NAME
     prefix_attach_mem - creates PREFIX protocol on top of underlying socket

SYNOPSIS
	    #include <libdill.h>

	    int prefix_attach_mem(
		int s,
		size_t hdrlen,
		int flags,
		struct prefix_storage* mem);

DESCRIPTION
     PREFIX  is  a  message-based  protocol  to send binary messages prefixed by
     size.  The protocol has no initial handshake.  Terminal handshake is accom-
     plished by each peer sending size field filled by 0xff bytes.

     This function instantiates PREFIX protocol on top of the underlying  proto-
     col.

     This  function allows to avoid one dynamic memory allocation by storing the
     object in user-supplied memory.  Unless you are hyper-optimizing  use  pre-
     fix_attach instead.

     s: Handle of the underlying socket.  It must be a bytestream protocol.

     hdrlen: Size of the length field, in bytes.

     flags:  If  set to PREFIX_BIG_ENDIAN (also known as network byte order, the
     default option) the most significant byte of the size will be sent first on
     the wire.	If set to PREFIX_LITTLE_ENDIAN the least signiticant  byte  will
     come first.

     mem:  The	structure  to store the newly created object in.  It must not be
     deallocated before the object is closed.

     The socket can be cleanly shut down using prefix_detach function.

     This function is not available if libdill is compiled with  --disable-sock-
     ets option.

RETURN VALUE
     In  case  of  success the function returns newly created socket handle.  In
     case of error it returns -1 and sets errno to one of the values below.

ERRORS
     * EBADF: Invalid handle.

     * EINVAL: Invalid argument.

     * EMFILE: The maximum number of file descriptors in the process are already
       open.

     * ENFILE: The maximum number of file descriptors in the system are  already
       open.

     * ENOMEM: Not enough memory.

     * ENOTSUP: The handle does not support this operation.

     * EPROTO: Underlying socket is not a bytestream socket.

EXAMPLE
	    int s = tcp_connect(&addr, -1);
	    s = prefix_attach(s, 2, 0);
	    msend(s, "ABC", 3, -1);
	    char buf[256];
	    ssize_t sz = mrecv(s, buf, sizeof(buf), -1);
	    s = prefix_detach(s, -1);
	    tcp_close(s);

SEE ALSO
     hclose(3) mrecv(3) mrecvl(3) msend(3) msendl(3) prefix_attach(3) prefix_de-
     tach(3)

libdill 						    PREFIX_ATTACH_MEM(3)

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

home | help