NAME
socket — interprocess communications
DESCRIPTION
Sockets are communication endpoints that allow processes to communicate
either locally or remotely.
They are accessed by means of a set of system calls (see
socket(2)).
The following
ioctl()
requests are defined in
<sys/ioctl.h>
(see
ioctl(2)):
- FIOSNBIO
If the int with the address
arg
is non-zero, the socket is put into non-blocking mode.
Otherwise, the socket is put into blocking mode.
Blocking mode is the default.
The
FIONBIO
request is equivalent to the
FIOSNBIO
request, although using
FIONBIO
is not recommended.
See
accept(2),
connect(2),
recv(2),
and
send(2)
for an explanation of how non-blocking mode is used.
- FIONREAD
For
SOCK_STREAM
sockets, the number of bytes currently readable from this socket
is returned in the integer with the address
arg.
For
SOCK_DGRAM
sockets, the number of bytes currently readable, plus the size of the
sockaddr
structure (defined in
<sys/socket.h>),
is returned in the integer with the address
arg.
- SIOCATMARK
For
SOCK_STREAM TCP
sockets, on return the integer with the address
arg
is non-zero if the inbound
TCP
stream has been read up to where the out-of-band data byte starts.
Otherwise, the inbound
TCP
stream has not yet been read up to where the out-of-band data byte starts.
For sockets other than
SOCK_STREAM TCP
sockets, on return the integer with the address
arg
is always zero.
- SIOCSPGRP
This request sets the process group or process
ID
associated with the socket to be the value of the integer with the address
arg.
A process group or process
ID
associated with the socket in this manner
is signaled when the state of the socket changes:
SIGURG
is delivered upon the receipt of out-of-band data;
SIGIO
is delivered if the socket is asynchronous, as described in
FIOASYNC
below.
If the value of the integer with the address
arg
is positive, the signal is sent to the process whose process
ID
matches the value specified.
If the value is negative, the signal is sent
to all the processes that have a process group
equal to the absolute value of the value specified.
If the value is zero, no signal is sent to any process.
It is necessary to issue this request with a non-zero integer value
to enable the signal delivery mechanism described above.
The default for the process group or process
ID
value is zero.
- SIOCGPGRP
This request returns the process group or process
ID
associated with the socket in the integer with the address
arg.
See the explanation for
SIOCSPGRP
above for more details on the meaning of the integer value returned.
- FIOASYNC
If the integer whose address is
arg
is non-zero, this request sets the state of the socket as asynchronous.
Otherwise, the socket is put into synchronous mode (the default).
Asynchronous mode enables the delivery of the
SIGIO
signal when either of the following conditions is met.
For connection-oriented protocols,
whenever additional outgoing buffer space becomes available
or the connection is established or broken.
The process group or process
ID
associated with the socket must be non-zero in order for
SIGIO
signals to be sent. The signal is delivered according to the semantics of
SIOCSPGRP
described above.
The
fcntl(2)
O_NDELAY
and
O_NONBLOCK
flags (defined in
<fcntl.h>)
are supported by sockets.
If the
O_NONBLOCK
flag is set, the socket is put into
POSIX-style non-blocking mode.
If the
O_NDELAY
flag is set, the socket is put into non-blocking mode.
Otherwise, the socket is put into blocking mode.
Blocking mode is the default.
See
accept(2),
connect(2),
recv(2),
and
send(2)
for an explanation of how these forms of non-blocking mode are used.
Since the
fcntl()
O_NONBLOCK
and
O_NDELAY
flags and
ioctl()
FIOSNBIO
requests are supported,
the following clarifies on how these features interact.
If the
O_NONBLOCK
or
O_NDELAY
flag has been set,
recv()
and
send()
requests behave accordingly, regardless of any
FIOSNBIO
requests.
If neither the
O_NONBLOCK
flag nor the
O_NDELAY
flag has been set,
FIOSNBIO
requests control the the behavior of
recv()
and
send().
DEPENDENCIES
AF_CCITT Only
Only the
FIOSNBIO,
FIONREAD,
SIOCGPGRP,
and
SIOCSPGRP
ioctl()
requests are defined for
af_ccitt
sockets.
AUTHOR
socket
was developed by the University of California, Berkeley.