Home
Main website
Display Sidebar
Hide Ads
Recent Changes
View Source:
socket(7)
Edit
PageHistory
Diff
Info
LikePages
SOCKET !!!SOCKET NAME SYNOPSIS DESCRIPTION SOCKET LAYER FUNCTIONS SOCKET OPTIONS SIGNALS SYSCTLS IOCTLS NOTES BUGS VERSIONS AUTHORS SEE ALSO ---- !!NAME socket - Linux socket interface !!SYNOPSIS __#include __'' mysocket'' __= socket(int__ ''socket_family''__, int__ ''socket_type''__, int__ ''protocol''__);__ !!DESCRIPTION This manual page describes the Linux networking socket layer user interface. The BSD compatible sockets are the uniform interface between the user process and the network protocol stacks in the kernel. The protocol modules are grouped into ''protocol families'' like __PF_INET__, __PF_IPX__, __PF_PACKET__ and ''socket types'' like __SOCK_STREAM__ or __SOCK_DGRAM__. See socket(2) for more information on families and types. !!SOCKET LAYER FUNCTIONS These functions are used by the user process to send or receive packets and to do other socket operations. For more information see their respective manual pages. socket(2) creates a socket, connect(2) connects a socket to a remote socket address, the bind(2) function binds a socket to a local socket address, listen(2) tells the socket that new connections shall be accepted, and accept(2) is used to get a new socket with a new incomming connection. socketpair(2) returns two connected anonymous sockets (only implemented for a few local families like __PF_UNIX__) send(2), sendto(2), and sendmsg(2) send data over a socket, and recv(2), recvfrom(2), recvmsg(2) receive data from a socket. poll(2) and select(2) wait for arriving data or a readiness to send data. In addition, the standard I/O operations like write(2), writev(2), sendfile(2), read(2), and readv(2) can be used to read and write data. getsockname(2) returns the local socket address and getpeername(2) returns the remote socket address. getsockopt(2) and setsockopt(2) are used to set or get socket layer or protocol options. ioctl(2) can be used to set or read some other options. close(2) is used to close a socket. shutdown(2) closes parts of a full duplex socket connection. Seeking, or calling pread(2) or pwrite(2) with a non-zero position is not supported on sockets. It is possible to do non-blocking IO on sockets by setting the __O_NONBLOCK__ flag on a socket file descriptor using fcntl(2). Then all operations that would block will (usually) return with __EAGAIN__ (operation should be retried later); connect(2) will return __EINPROGRESS__ error. The user can then wait for various events via poll(2) or select(2). An alternative to poll/select is to let the kernel inform the application about events via a __SIGIO__ signal. For that the __FASYNC__ flag must be set on a socket file descriptor via fcntl(2) and a valid signal handler for __SIGIO__ must be installed via sigaction(2). See the ''SIGNALS'' discussion below. !!SOCKET OPTIONS These socket options can be set by using setsockopt(2) and read with getsockopt(2) with the socket level set to __SOL_SOCKET__ for all sockets: __SO_KEEPALIVE__ Enable sending of keep-alive messages on connection-oriented sockets. Expects a integer boolean flag. __SO_OOBINLINE__ If this option is enabled, out-of-band data is directly placed into the receive data stream. Otherwise out-of-band data is only passed when the __MSG_OOB__ flag is set during receiving. __SO_RCVLOWAT__ and __SO_SNDLOWAT__ Specify the minimum number of bytes in the buffer until the socket layer will pass the data to the protocol (__SO_SNDLOWAT__) or the user on receiving (__SO_RCVLOWAT__). These two values are not changeable in Linux and their argument size is always fixed to 1 byte. __getsockopt__ is able to read them; __setsockopt__ will always return __ENOPROTOOPT__. __SO_RCVTIMEO__ and __SO_SNDTIMEO__ Specify the sending or receiving timeouts until reporting an error. They are fixed to a protocol specific setting in Linux and cannot be read or written. Their functionality can be emulated using alarm(2) or setitimer(2). __SO_BSDCOMPAT__ Enable BSD bug-to-bug compatibility. This is used only by the UDP protocol module and scheduled to be removed in future. If enabled ICMP errors received for a UDP socket will not be passed to the user program. Linux 2.0 also enabled BSD bug-to-bug compatibility options (random header changing, skipping of the broadcast flag) for raw sockets with this option, but that has been removed in Linux 2.2. It is better to fix the user programs than to enable this flag. __SO_PASSCRED__ Enable or disable the receiving of the __SCM_CREDENTIALS__ control message. For more information see unix(7). __SO_PEERCRED__ Return the credentials of the foreign process connected to this socket. Only useful for __PF_UNIX__ sockets; see unix(7). Argument is a __ucred__ structure. Only valid as a __getsockopt__. __SO_BINDTODEVICE__ Bind this socket to a particular device like ``eth0'', as specified in the passed interface name. If the name is an empty string or the option length is zero, the socket device binding is removed. The passed option is a variable-length null terminated interface name string with the maximum size of __IFNAMSIZ__. If a socket is bound to an interface, only packets received from that particular interface are processed by the socket. Note that this only works for some socket types, particularly __AF_INET__ sockets. It is not supported for packet sockets (use normal bind(8) there). __SO_DEBUG__ Enable socket debugging. Only allowed for processes with the __CAP_NET_ADMIN__ capability or an effective user id of 0. __SO_REUSEADDR__ Indicates that the rules used in validating addresses supplied in a bind(2) call should allow reuse of local addresses. For __PF_INET__ sockets this means that a socket may bind, except when there is an active listening socket bound to the address. When the listening socket is bound to __INADDR_ANY__ with a specific port then it is not possible to bind to this port for any local address. __SO_TYPE__ Gets the socket type as an integer (like __SOCK_STREAM__). Can be only read with __getsockopt__. __SO_DONTROUTE__ Don't send via a gateway, only send to directly connected hosts. The same effect can be achieved by setting the __MSG_DONTROUTE__ flag on a socket send(2) operation. Expects an integer boolean flag. __SO_BROADCAST__ Set or get the broadcast flag. When enabled, datagram sockets receive packets sent to a broadcast address and they are allowed to send packets to a broadcast address. This option has no effect on stream-oriented sockets. __SO_SNDBUF__ Sets or gets the maximum socket send buffer in bytes. The default value is set by the __wmem_default__ sysctl and the maximum allowed value is set by the __wmem_max__ sysctl. __SO_RCVBUF__ Sets or gets the maximum socket receive buffer in bytes. The default value is set by the __rmem_default__ sysctl and the maximum allowed value is set by the __rmem_max__ sysctl. __SO_LINGER__ Sets or gets the __SO_LINGER__ option. The argument is a __linger__ structure. struct linger { int l_onoff; /* linger active */ int l_linger; /* how many seconds to linger for */ }; When enabled, a close(2) or shutdown(2) will not return until all queued messages for the socket have been successfully sent or the linger timeout has been reached. Otherwise, the call returns immediately and the closing is done in the background. When the socket is closed as part of exit(2), it always lingers in the background. __SO_PRIORITY__ Set the protocol-defined priority for all packets to be sent on this socket. Linux uses this value to order the networking queues: packets with a higher priority may be processed first depending on the selected device queueing discipline. For ip(7), this also sets the IP type-of-service (TOS) field for outgoing packets. __SO_ERROR__ Get and clear the pending socket error. Only valid as a __getsockopt__. Expects an integer. !!SIGNALS When writing onto a connection-oriented socket that has been shut down (by the local or the remote end) __SIGPIPE__ is sent to the writing process and __EPIPE__ is returned. The signal is not sent when the write call specified the __MSG_NOSIGNAL__ flag. When requested with the __FIOCSETOWN__ fcntl or __SIOCSPGRP__ ioctl, __SIGIO__ is sent when an I/O event occurs. It is possible to use poll(2) or select(2) in the signal handler to find out which socket the event occurred on. An alternative (in Linux 2.2) is to set a realtime signal using the __F_SETSIG__ fcntl; the handler of the real time signal will be called with the file descriptor in the ''si_fd'' field of its ''siginfo_t''. See fcntl(2) for more information. Under some circumstances (e.g. multiple processes accessing a single socket), the condition that caused the __SIGIO__ may have already disappeared when the process reacts to the signal. If this happens, the process should wait again because Linux will resend the signal later. !!SYSCTLS The core socket networking sysctls can be accessed using the __/proc/sys/net/core/*__ files or with the sysctl(2) interface. __rmem_default__ contains the default setting in bytes of the socket receive buffer. __rmem_max__ contains the maximum socket receive buffer size in bytes which a user may set by using the __SO_RCVBUF__ socket option. __wmem_default__ contains the default setting in bytes of the socket send buffer. __wmem_max__ contains the maximum socket send buffer size in bytes which a user may set by using the __SO_SNDBUF__ socket option. __message_cost__ and __message_burst__ configure the token bucket filter used to load limit warning messages caused by external network events. __netdev_max_backlog__ Maximum number of packets in the global input queue. __optmem_max__ Maximum length of ancillary data and user control data like the iovecs per socket. !!IOCTLS These ioctls can be accessed using ioctl(2): ''error'' __= ioctl(__''ip_socket''__,__ ''ioctl_type''__,__ ''''__); __ __SIOCGSTAMP__ Return a __struct timeval__ with the receive timestamp of the last packet passed to the user. This is useful for accurate round trip time measurements. See setitimer(2) for a description of __struct timeval__. __SIOCSPGRP__ Set the process or process group to send __SIGIO__ or __SIGURG__ signals to when an asynchronous I/O operation has finished or urgent data is available. The argument is a pointer to a __pid_t__. If the argument is positive, send the signals to that process. If the argument is negative, send the signals to the process group with the id of the absolute value of the argument. The process may only choose itself or its own process group to receive signals unless it has the __CAP_KILL__ capability or an effective UID of 0. __FIOASYNC__ Change the __O_ASYNC__ flag to enable or disable asynchronous IO mode of the socket. Asynchronous IO mode means that the __SIGIO__ signal or the signal set with __F_SETSIG__ is raised when a new I/O event occurs. Argument is a integer boolean flag. __SIOCGPGRP__ Get the current process or process group that receives __SIGIO__ or __SIGURG__ signals, or 0 when none is set. Valid fcntls: __FIOCGETOWN__ The same as the SIOCGPGRP ioctl. __FIOCSETOWN__ The same as the SIOCSPGRP ioctl !!NOTES Linux assumes that half of the send/receive buffer is used for internal kernel structures; thus the sysctls are twice what can be observed on the wire. !!BUGS The __CONFIG_FILTER__ socket options __SO_ATTACH_FILTER__ and __SO_DETACH_FILTER__ are not documented. The suggested interface to use them is via the libpcap library. !!VERSIONS __SO_BINDTODEVICE__ was introduced in Linux 2.0.30. __SO_PASSCRED__ is new in Linux 2.2. The sysctls are new in Linux 2.2. !!AUTHORS This man page was written by Andi Kleen. !!SEE ALSO socket(2), ip(7), setsockopt(2), getsockopt(2), packet(7), ddp(7) ----
23 pages link to
socket(7)
:
udp(7)
ioctl(2)
SIGURG
ddp(7)
tcp(7)
Man7s
cmsg(3)
ipv6(7)
unix(7)
raw(7)
sendto(2)
x25(7)
ESPIPE
bind(2)
getsockopt(2)
packet(7)
accept(2)
sendmsg(2)
setsockopt(2)
ESHUTDOWN
ip(7)
send(2)
ETIMEDOUT
This page is a man page (or other imported legacy content). We are unable to automatically determine the license status of this page.