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

FreeBSD Manual Pages

  
 
  

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

NAME
       term_done - half-closes the connection

SYNOPSIS
	      #include <libdill.h>

	      int term_done(
		  int s,
		  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  sends the termination message to	the peer.  Afterwards,
       it is not possible to send more messages.  However, it is still	possi-
       ble to receiving	outstanding inbound messages.

       s: The TERM protocol handle.

       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.

       This  function  is  not	available  if  libdill is compiled with	--dis-
       able-sockets option.

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

ERRORS
       o EBADF:	Invalid	handle.

       o ECANCELED: Current coroutine was canceled.

       o EIPE: The termination message was already sent.

       o ENOTSUP: The handle is	not a TERM protocol handle.

       o 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
       mrecv(3)	 mrecvl(3)  msend(3)  msendl(3)	now(3) term_attach(3) term_at-
       tach_mem(3) term_detach(3)

libdill								  TERM_DONE(3)

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | EXAMPLE | SEE ALSO

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=term_done&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help