summaryrefslogtreecommitdiffstats
path: root/man3/sockatmark.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/sockatmark.3')
-rw-r--r--man3/sockatmark.3139
1 files changed, 139 insertions, 0 deletions
diff --git a/man3/sockatmark.3 b/man3/sockatmark.3
new file mode 100644
index 0000000..ca03910
--- /dev/null
+++ b/man3/sockatmark.3
@@ -0,0 +1,139 @@
+'\" t
+.\" Copyright (c) 2006, Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH sockatmark 3 2023-07-20 "Linux man-pages 6.05.01"
+.SH NAME
+sockatmark \- determine whether socket is at out-of-band mark
+.SH LIBRARY
+Standard C library
+.RI ( libc ", " \-lc )
+.SH SYNOPSIS
+.nf
+.B #include <sys/socket.h>
+.PP
+.BI "int sockatmark(int " sockfd );
+.fi
+.PP
+.RS -4
+Feature Test Macro Requirements for glibc (see
+.BR feature_test_macros (7)):
+.RE
+.PP
+.BR sockatmark ():
+.nf
+ _POSIX_C_SOURCE >= 200112L
+.fi
+.SH DESCRIPTION
+.BR sockatmark ()
+returns a value indicating whether or not the socket referred
+to by the file descriptor
+.I 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.
+.SH RETURN VALUE
+A successful call to
+.BR 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
+.I errno
+is set to indicate the error.
+.SH ERRORS
+.TP
+.B EBADF
+.I sockfd
+is not a valid file descriptor.
+.TP
+.B EINVAL
+.\" POSIX.1 says ENOTTY for this case
+.I sockfd
+is not a file descriptor to which
+.BR sockatmark ()
+can be applied.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lbx lb lb
+l l l.
+Interface Attribute Value
+T{
+.na
+.nh
+.BR sockatmark ()
+T} Thread safety MT-Safe
+.TE
+.sp 1
+.SH STANDARDS
+POSIX.1-2008.
+.SH HISTORY
+glibc 2.2.4.
+POSIX.1-2001.
+.SH NOTES
+If
+.BR sockatmark ()
+returns 1, then the out-of-band data can be read using the
+.B MSG_OOB
+flag of
+.BR recv (2).
+.PP
+Out-of-band data is supported only on some stream socket protocols.
+.PP
+.BR sockatmark ()
+can safely be called from a handler for the
+.B SIGURG
+signal.
+.PP
+.BR sockatmark ()
+is implemented using the
+.B SIOCATMARK
+.BR ioctl (2)
+operation.
+.SH BUGS
+Prior to glibc 2.4,
+.BR sockatmark ()
+did not work.
+.SH EXAMPLES
+The following code can be used after receipt of a
+.B SIGURG
+signal to read (and discard) all data up to the mark,
+and then read the byte of data at the mark:
+.PP
+.EX
+ 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);
+ if (s == \-1)
+ perror("read");
+ if (s <= 0)
+ break;
+ }
+\&
+ if (atmark == 1) {
+ if (recv(sockfd, &oobdata, 1, MSG_OOB) == \-1) {
+ perror("recv");
+ ...
+ }
+ }
+.EE
+.SH SEE ALSO
+.BR fcntl (2),
+.BR recv (2),
+.BR send (2),
+.BR tcp (7)