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

FreeBSD Manual Pages

  
 
  

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

NAME
       term_attach - creates TERM protocol on top of underlying	socket

SYNOPSIS
	      #include <libdill.h>

	      int term_attach(
		  int s,
		  const	void* buf,
		  size_t len,
		  int64_t deadline);

DESCRIPTION
       TERM  is	 a  protocol  that implements clean terminal handshake between
       peers.  When creating the protocol instance user	specifies the terminal
       message to use.	When closing the protocol, terminal messages  are  ex-
       changed	between	 peers	in  both directions.  After the	protocol shuts
       down the	peers agree on their position in the message stream.

       This function instantiates TERM protocol	on top of the underlying  pro-
       tocol.

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

       buf: The	terminal message.

       len: Size of the	terminal message, in bytes.

       deadline:  A  point in time when	the operation should time out, in mil-
       liseconds.  Use the now function	to get your current point in time.   0
       means immediate timeout,	i.e., perform the operation if possible	or re-
       turn  without  blocking	if  not.  -1 means no deadline,	i.e., the call
       will block forever if the operation cannot be performed.

       The socket can be cleanly shut down using term_detach function.

       This function is	not available  if  libdill  is	compiled  with	--dis-
       able-sockets 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  be-
       low.

ERRORS
        EBADF:	Invalid	handle.

        ECANCELED: Current coroutine was canceled.

        EMFILE: The maximum number of file descriptors	in the process are al-
	 ready open.

        ENFILE:  The maximum number of	file descriptors in the	system are al-
	 ready open.

        ENOMEM: Not enough memory.

        ENOTSUP: The handle does not support this operation.

        EPROTO: Underlying socket is not a message socket.

        ETIMEDOUT: Deadline was reached.

EXAMPLE
	      s	= term_attach(s, "STOP", 4);
	      ...
	      /* Send terminal message to the peer. */
	      term_done(s, -1);
	      /* Process remaining inbound messages. */
	      while(1) {
		  char buf[256];
		  ssize_t sz = mrecv(s,	buf, sizeof(buf), -1);
		  /* Check whether terminal message was	received from the peer.	*/
		  if(sz	< 0 && errno ==	EPIPE) break;
		  frobnicate(buff, sz);
	      }
	      s	= term_detach(s);

SEE ALSO
       hclose(3)  mrecv(3)  mrecvl(3)  msend(3)	 msendl(3)   now(3)   term_at-
       tach_mem(3) term_detach(3) term_done(3)

libdill								TERM_ATTACH(3)

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

home | help