Determines whether a socket is at the out-of-band mark.
#include <sys/socket.h>
int sockatmark(s)
int s;
The sockatmark subroutine determines whether the socket specified by the s parameter is at the out-of-band data mark. If the protocol for the socket supports out-of-band data by marking the stream with an out-of-band data mark, the sockatmark subroutine returns a 1 when all data preceding the mark has been read and the out-of-band data mark is the first element in the receive queue. The sockatmark subroutine does not remove the mark from the stream.
The use of this subroutine between receive operations allows an application to determine which received data precedes the out-of-band data and which follows the out-of-band data. There is an inherent race condition in the use of this function. On an empty receive queue, the current read of the location might well be at the mark', but the system has no way of knowing that the next data segment that will arrive from the network will carry the mark, and sockatmark will return false The next read operation will silently consume the mark. Because of this, the sockatmark subroutine can only be used reliably when the application already knows that the out-of-band data has been seen by the system or that it is known that there is data waiting to be read at the socket.
Item | Description |
---|---|
s | Specifies the socked to be checked. |
Upon successful completion, the sockatmark subroutine returns a value indicating whether the socket is at an out-of-band data mark. If the protocol has marked the data stream and all data preceding the mark has been read, the return value is 1. If there is no mark, or if data precedes the mark in the receive queue, the sockatmark subroutine returns a 0. Otherwise, it returns a value of -1 and sets the errno global variable to indicate the error.
Item | Description |
---|---|
EBADF | The s parameter is not a valid file descriptor. |
ENOTTY | The s parameter does not specify a descriptor for a socket. |