sockatmark — determine whether socket is at out-of-band mark
#include <sys/socket.h>
int sockatmark( |
int sockfd) ; |
Note | |||
---|---|---|---|
|
sockatmark
() returns a value
indicating whether or not the socket referred 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.
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 errno
is set to
indicate the error.
sockfd
is
not a valid file descriptor.
sockfd
is
not a file descriptor to which sockatmark
() can be applied.
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 only supported 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.
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"); ... } }
This page is part of release 3.24 of the Linux man-pages
project. A
description of the project, and information about reporting
bugs, can be found at
http://www.kernel.org/doc/man-pages/.
Copyright (c) 2006, Michael Kerrisk (mtk.manpagesgmail.com) Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally. Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work. |