logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

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

Attributes

       For an explanation of the terms used in this section, see attributes(7).
       ┌─────────────────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
       │ InterfaceAttributeValue   │
       ├─────────────────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
       │ sockatmark()                                                                │ Thread safety │ MT-Safe │
       └─────────────────────────────────────────────────────────────────────────────┴───────────────┴─────────┘

Bugs

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

Description

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.

Errors

EBADFsockfd is not a valid file descriptor.

       EINVALsockfd is not a file descriptor to which sockatmark() can be applied.

Examples

       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);
               if (s == -1)
                   perror("read");
               if (s <= 0)
                   break;
           }

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

History

       glibc 2.2.4.  POSIX.1-2001.

Library

       Standard C library (libc, -lc)

Name

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

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 SIOCATMARKioctl(2) operation.

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 errno is set to indicate the error.

See Also

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

Linux man-pages 6.9.1                              2024-05-02                                      sockatmark(3)

Standards

       POSIX.1-2008.

Synopsis

#include<sys/socket.h>intsockatmark(intsockfd);

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

       sockatmark():
           _POSIX_C_SOURCE >= 200112L

See Also