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

FreeBSD Manual Pages

  
 
  

home | help
SOCKATMARK(3)		   Linux Programmer's Manual		 SOCKATMARK(3)

NAME
       sockatmark - determine whether socket is	at out-of-band mark

SYNOPSIS
       #include	<sys/socket.h>

       int sockatmark(int sockfd);

   Feature Test	Macro Requirements for glibc (see feature_test_macros(7)):

       sockatmark(): _POSIX_C_SOURCE >=	200112L	|| _XOPEN_SOURCE >= 600

DESCRIPTION
       sockatmark()  returns  a	value indicating whether or not	the socket re-
       ferred to by the	file descriptor	sockfd is at the out-of-band mark.  If
       the  socket is at the mark, then	1 is returned; if the socket is	not at
       the mark, 0 is returned.	 This function does not	remove the out-of-band
       mark.

RETURN VALUE
       A  successful  call  to	sockatmark() returns 1 if the socket is	at the
       out-of-band mark, or 0 if it is not.  On	error, -1 is returned and  er-
       rno is set to indicate the error.

ERRORS
       EBADF  sockfd is	not a valid file descriptor.

       EINVAL sockfd is	not a file descriptor to which sockatmark() can	be ap-
	      plied.

VERSIONS
       sockatmark() was	added to glibc in version 2.2.4.

ATTRIBUTES
   Multithreading (see pthreads(7))
       The sockatmark()	function is thread-safe.

CONFORMING TO
       POSIX.1-2001.

NOTES
       If sockatmark() returns 1, then the out-of-band data can	be read	 using
       the MSG_OOB flag	of recv(2).

       Out-of-band data	is supported only on some stream socket	protocols.

       sockatmark() can	safely be called from a	handler	for the	SIGURG signal.

       sockatmark() is implemented using the SIOCATMARK	ioctl(2) operation.

BUGS
       Prior to	glibc 2.4, sockatmark()	did not	work.

EXAMPLE
       The following code can be used after receipt of a SIGURG	signal to read
       (and discard) all data up to the	mark, and then read the	byte  of  data
       at the mark:

	   char	buf[BUF_LEN];
	   char	oobdata;
	   int atmark, s;

	   for (;;) {
	       atmark =	sockatmark(sockfd);
	       if (atmark == -1) {
		   perror("sockatmark");
		   break;
	       }

	       if (atmark)
		   break;

	       s = read(sockfd,	buf, BUF_LEN) <= 0);
	       if (s ==	-1)
		   perror("read");
	       if (s <=	0)
		   break;
	   }

	   if (atmark == 1) {
	       if (recv(sockfd,	&oobdata, 1, MSG_OOB) == -1) {
		   perror("recv");
		   ...
	       }
	   }

SEE ALSO
       fcntl(2), recv(2), send(2), tcp(7)

COLOPHON
       This  page  is  part of release 3.74 of the Linux man-pages project.  A
       description of the project, information about reporting bugs,  and  the
       latest	  version     of     this    page,    can    be	   found    at
       http://www.kernel.org/doc/man-pages/.

Linux				  2014-02-28			 SOCKATMARK(3)

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | VERSIONS | ATTRIBUTES | CONFORMING TO | NOTES | BUGS | EXAMPLE | SEE ALSO | COLOPHON

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=sockatmark&sektion=3&manpath=Debian+8.1.0>

home | help