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

FreeBSD Manual Pages

  
 
  

home | help
SOCKATMARK(3)		     Library Functions Manual		   SOCKATMARK(3)

NAME
     sockatmark -- determine whether the read pointer is at the OOB mark

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <sys/socket.h>

     int
     sockatmark(int s);

DESCRIPTION
     To  find  out  if the read pointer is currently pointing at the mark in the
     data stream, the sockatmark() function is provided.   If  sockatmark()  re-
     turns  1, the next read will return data after the mark.  Otherwise (assum-
     ing out of band data has arrived), the next read will provide data sent  by
     the  client  prior  to transmission of the out of band signal.  The routine
     used in the remote login process to flush output on receipt of an interrupt
     or quit signal is shown below.  It reads the normal data up to the mark (to
     discard it), then reads the out-of-band byte.

	   #include <sys/socket.h>
	   ...
	   oob()
	   {
		   int out = FWRITE, mark;
		   char waste[BUFSIZ];

		   /* flush local terminal output */
		   ioctl(1, TIOCFLUSH, (char *)&out);
		   for (;;) {
			   if ((mark = sockatmark(rem)) < 0) {
				   perror("sockatmark");
				   break;
			   }
			   if (mark)
				   break;
			   (void) read(rem, waste, sizeof (waste));
		   }
		   if (recv(rem, &mark, 1, MSG_OOB) < 0) {
			   perror("recv");
			   ...
		   }
		   ...
	   }

RETURN VALUES
     Upon successful completion, the sockatmark() function returns the	value  1
     if the read pointer is pointing at the OOB mark, 0 if it is not.  Otherwise
     the  value  -1 is returned and the global variable errno is set to indicate
     the error.

ERRORS
     The sockatmark() call fails if:

     [EBADF]		The s argument is not a valid descriptor.

     [ENOTTY]		The s argument is a descriptor for a file, not a socket.

SEE ALSO
     recv(2), send(2)

     Stuart Sechrest, An Introductory 4.4BSD Interprocess  Communication  Tutor-
     ial.

     Samuel  J.  Leffler,  Robert  S. Fabry, William N. Joy, Phil Lapsley, Steve
     Miller, and Chris Torek, An Advanced 4.4BSD Interprocess Communication  Tu-
     torial, https://docs.freebsd.org/44doc/psd/21.ipc/paper.pdf.

HISTORY
     The   sockatmark()   function   was  introduced  by  IEEE	Std  1003.1-2001
     ("POSIX.1"), to standardize the historical SIOCATMARK ioctl(2).  The ENOTTY
     error instead of the usual ENOTSOCK is to match the historical behavior  of
     SIOCATMARK.

FreeBSD 14.3			  July 3, 2022			   SOCKATMARK(3)

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

home | help