diff options
| author | Michael Kerrisk <mtk.manpages@gmail.com> | 2008-08-08 16:28:06 +0000 |
|---|---|---|
| committer | Michael Kerrisk <mtk.manpages@gmail.com> | 2008-08-08 16:28:06 +0000 |
| commit | 10874173dba2edf045eebd9e85945970182dbaf6 (patch) | |
| tree | ec42e47e1a8fc25ca4e816fd99a570404f3aa5c5 /man7/tcp.7 | |
| parent | ea6ac50ed39e1c963454c837065ef7beeaccb0b8 (diff) | |
| download | man-pages-10874173dba2edf045eebd9e85945970182dbaf6.tar.gz | |
s/PF_/AF_/ for socket family conistants. Reasons: the AF_ and
PF_ constants have always had the same values; there never has
been a protocol family that had more than one address family,
and POSIX.1-2001 only specifies the AF_* constants.
Diffstat (limited to 'man7/tcp.7')
| -rw-r--r-- | man7/tcp.7 | 955 |
1 files changed, 8 insertions, 947 deletions
diff --git a/man7/tcp.7 b/man7/tcp.7 index c641d2f907..5ad2fef091 100644 --- a/man7/tcp.7 +++ b/man7/tcp.7 @@ -1,947 +1,8 @@ -.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>. -.\" Permission is granted to distribute possibly modified copies -.\" of this page provided the header is included verbatim, -.\" and in case of nontrivial modification author and date -.\" of the modification is added to the header. -.\" -.\" 2.4 Updates by Nivedita Singhvi 4/20/02 <nivedita@us.ibm.com>. -.\" Modified, 2004-11-11, Michael Kerrisk and Andries Brouwer -.\" Updated details of interaction of TCP_CORK and TCP_NODELAY. -.\" -.\" FIXME 2.6.17-rc1 adds the following /proc files, which need to be -.\" documented: tcp_mtu_probing, tcp_base_mss, and -.\" tcp_workaround_signed_windows -.\" -.TH TCP 7 2007-11-25 "Linux" "Linux Programmer's Manual" -.SH NAME -tcp \- TCP protocol -.SH SYNOPSIS -.B #include <sys/socket.h> -.br -.B #include <netinet/in.h> -.br -.B #include <netinet/tcp.h> -.sp -.B tcp_socket = socket(PF_INET, SOCK_STREAM, 0); -.SH DESCRIPTION -This is an implementation of the TCP protocol defined in -RFC\ 793, RFC\ 1122 and RFC\ 2001 with the NewReno and SACK -extensions. -It provides a reliable, stream-oriented, -full-duplex connection between two sockets on top of -.BR ip (7), -for both v4 and v6 versions. -TCP guarantees that the data arrives in order and -retransmits lost packets. -It generates and checks a per-packet checksum to catch -transmission errors. -TCP does not preserve record boundaries. - -A newly created TCP socket has no remote or local address and is not -fully specified. -To create an outgoing TCP connection use -.BR connect (2) -to establish a connection to another TCP socket. -To receive new incoming connections, first -.BR bind (2) -the socket to a local address and port and then call -.BR listen (2) -to put the socket into the listening state. -After that a new -socket for each incoming connection can be accepted -using -.BR accept (2). -A socket which has had -.BR accept (2) -or -.BR connect (2) -successfully called on it is fully specified and may -transmit data. -Data cannot be transmitted on listening or -not yet connected sockets. - -Linux supports RFC\ 1323 TCP high performance -extensions. -These include Protection Against Wrapped -Sequence Numbers (PAWS), Window Scaling and -Timestamps. -Window scaling allows the use -of large (> 64K) TCP windows in order to support links with high -latency or bandwidth. -To make use of them, the send and -receive buffer sizes must be increased. -They can be set globally with the -.I net.ipv4.tcp_wmem -and -.I net.ipv4.tcp_rmem -sysctl variables, or on individual sockets by using the -.B SO_SNDBUF -and -.B SO_RCVBUF -socket options with the -.BR setsockopt (2) -call. - -The maximum sizes for socket buffers declared via the -.B SO_SNDBUF -and -.B SO_RCVBUF -mechanisms are limited by the global -.I net.core.rmem_max -and -.I net.core.wmem_max -sysctls. -Note that TCP actually allocates twice the size of -the buffer requested in the -.BR setsockopt (2) -call, and so a succeeding -.BR getsockopt (2) -call will not return the same size of buffer as requested -in the -.BR setsockopt (2) -call. -TCP uses the extra space for administrative purposes and internal -kernel structures, and the sysctl variables reflect the -larger sizes compared to the actual TCP windows. -On individual connections, the socket buffer size must be -set prior to the -.BR listen (2) -or -.BR connect (2) -calls in order to have it take effect. -See -.BR socket (7) -for more information. -.PP -TCP supports urgent data. -Urgent data is used to signal the -receiver that some important message is part of the data -stream and that it should be processed as soon as possible. -To send urgent data specify the -.B MSG_OOB -option to -.BR send (2). -When urgent data is received, the kernel sends a -.B SIGURG -signal to the process or process group that has been set as the -socket "owner" using the -.B SIOCSPGRP -or -.B FIOSETOWN -ioctls (or the POSIX.1-2001-specified -.BR fcntl (2) -.B F_SETOWN -operation). -When the -.B SO_OOBINLINE -socket option is enabled, urgent data is put into the normal -data stream (a program can test for its location using the -.B SIOCATMARK -ioctl described below), -otherwise it can be only received when the -.B MSG_OOB -flag is set for -.BR recv (2) -or -.BR recvmsg (2). - -Linux 2.4 introduced a number of changes for improved -throughput and scaling, as well as enhanced functionality. -Some of these features include support for zero-copy -.BR sendfile (2), -Explicit Congestion Notification, new -management of TIME_WAIT sockets, keep-alive socket options -and support for Duplicate SACK extensions. -.SS Address Formats -TCP is built on top of IP (see -.BR ip (7)). -The address formats defined by -.BR ip (7) -apply to TCP. -TCP only supports point-to-point -communication; broadcasting and multicasting are not -supported. -.SS Sysctls -These variables can be accessed by the -.I /proc/sys/net/ipv4/* -files or with the -.BR sysctl (2) -interface. -In addition, most IP sysctls also apply to TCP; see -.BR ip (7). -Variables described as -.I Boolean -take an integer value, with a non-zero value ("true") meaning that -the corresponding option is enabled, and a zero value ("false") -meaning that the option is disabled. -.\" FIXME As at Sept 2006, kernel 2.6.18-rc5, the following are -.\" not yet documented (shown with default values): -.\" -.\" /proc/sys/net/ipv4/tcp_congestion_control (since 2.6.13) -.\" bic -.\" /proc/sys/net/ipv4/tcp_moderate_rcvbuf -.\" 1 -.\" /proc/sys/net/ipv4/tcp_no_metrics_save -.\" 0 -.TP -.BR tcp_abort_on_overflow " (Boolean; default: disabled)" -Enable resetting connections if the listening service is too -slow and unable to keep up and accept them. -It means that if overflow occurred due -to a burst, the connection will recover. -Enable this option -.I only -if you are really sure that the listening daemon -cannot be tuned to accept connections faster. -Enabling this -option can harm the clients of your server. -.TP -.BR tcp_adv_win_scale " (integer; default: 2)" -Count buffering overhead as -.IR "bytes/2^tcp_adv_win_scale" , -if -.I tcp_adv_win_scale -is greater than 0; or -.IR "bytes-bytes/2^(\-tcp_adv_win_scale)" , -if -.I tcp_adv_win_scale -is less than or equal to zero. - -The socket receive buffer space is shared between the -application and kernel. -TCP maintains part of the buffer as -the TCP window, this is the size of the receive window -advertised to the other end. -The rest of the space is used -as the "application" buffer, used to isolate the network -from scheduling and application latencies. -The -.I tcp_adv_win_scale -default value of 2 implies that the space -used for the application buffer is one fourth that of the -total. -.TP -.BR tcp_app_win " (integer; default: 31)" -This variable defines how many -bytes of the TCP window are reserved for buffering -overhead. - -A maximum of (\fIwindow/2^tcp_app_win\fP, mss) bytes in the window -are reserved for the application buffer. -A value of 0 -implies that no amount is reserved. -.\" -.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt -.TP -.BR tcp_bic " (Boolean; default: disabled)" -Enable BIC TCP congestion control algorithm. -BIC-TCP is a sender-side only change that ensures a linear RTT -fairness under large windows while offering both scalability and -bounded TCP-friendliness. -The protocol combines two schemes -called additive increase and binary search increase. -When the -congestion window is large, additive increase with a large -increment ensures linear RTT fairness as well as good -scalability. -Under small congestion windows, binary search -increase provides TCP friendliness. -.\" -.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt -.TP -.BR tcp_bic_low_window " (integer; default: 14)" -Sets the threshold window (in packets) where BIC TCP starts to -adjust the congestion window. -Below this threshold BIC TCP behaves -the same as the default TCP Reno. -.\" -.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt -.TP -.BR tcp_bic_fast_convergence " (Boolean; default: enabled)" -Forces BIC TCP to more quickly respond to changes in congestion -window. -Allows two flows sharing the same connection to converge -more rapidly. -.TP -.BR tcp_dsack " (Boolean; default: enabled)" -Enable RFC\ 2883 TCP Duplicate SACK support. -.TP -.BR tcp_ecn " (Boolean; default: disabled)" -Enable RFC\ 2884 Explicit Congestion Notification. -When enabled, connectivity to some -destinations could be affected due to older, misbehaving -routers along the path causing connections to be dropped. -.TP -.BR tcp_fack " (Boolean; default: enabled)" -Enable TCP Forward Acknowledgement support. -.TP -.BR tcp_fin_timeout " (integer; default: 60)" -This specifies how many seconds to wait for a final FIN packet before the -socket is forcibly closed. -This is strictly a violation of -the TCP specification, but required to prevent -denial-of-service attacks. -In Linux 2.2, the default value was 180. -.\" -.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt -.TP -.BR tcp_frto " (Boolean; default: disabled)" -Enables F-RTO, an enhanced recovery algorithm for TCP retransmission -timeouts. -It is particularly beneficial in wireless environments -where packet loss is typically due to random radio interference -rather than intermediate router congestion. -.TP -.BR tcp_keepalive_intvl " (integer; default: 75)" -The number of seconds between TCP keep-alive probes. -.TP -.BR tcp_keepalive_probes " (integer; default: 9)" -The maximum number of TCP keep-alive probes to send -before giving up and killing the connection if -no response is obtained from the other end. -.TP -.BR tcp_keepalive_time " (integer; default: 7200)" -The number of seconds a connection needs to be idle -before TCP begins sending out keep-alive probes. -Keep-alives are only sent when the -.B SO_KEEPALIVE -socket option is enabled. -The default value is 7200 seconds (2 hours). -An idle connection is terminated after -approximately an additional 11 minutes (9 probes an interval -of 75 seconds apart) when keep-alive is enabled. - -Note that underlying connection tracking mechanisms and -application timeouts may be much shorter. -.\" -.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt -.TP -.BR tcp_low_latency " (Boolean; default: disabled)" -If enabled, the TCP stack makes decisions that prefer lower -latency as opposed to higher throughput. -It this option is disabled, then higher throughput is preferred. -An example of an application where this default should be -changed would be a Beowulf compute cluster. -.TP -.BR tcp_max_orphans " (integer; default: see below)" -The maximum number of orphaned (not attached to any user file -handle) TCP sockets allowed in the system. -When this number -is exceeded, the orphaned connection is reset and a warning -is printed. -This limit exists only to prevent simple denial-of-service attacks. -Lowering this limit is not recommended. -Network conditions might require you to increase the number of -orphans allowed, but note that each orphan can eat up to ~64K -of unswappable memory. -The default initial value is set -equal to the kernel parameter NR_FILE. -This initial default is adjusted depending on the memory in the system. -.TP -.BR tcp_max_syn_backlog " (integer; default: see below)" -The maximum number of queued connection requests which have -still not received an acknowledgement from the connecting client. -If this number is exceeded, the kernel will begin -dropping requests. -The default value of 256 is increased to -1024 when the memory present in the system is adequate or -greater (>= 128Mb), and reduced to 128 for those systems with -very low memory (<= 32Mb). -It is recommended that if this -needs to be increased above 1024, TCP_SYNQ_HSIZE in -.I include/net/tcp.h -be modified to keep -TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog, and the kernel be -recompiled. -.TP -.BR tcp_max_tw_buckets " (integer; default: see below)" -The maximum number of sockets in TIME_WAIT state allowed in -the system. -This limit exists only to prevent simple denial-of-service -attacks. -The default value of NR_FILE*2 is adjusted -depending on the memory in the system. -If this number is -exceeded, the socket is closed and a warning is printed. -.TP -.I tcp_mem -This is a vector of 3 integers: [low, pressure, high]. -These bounds are used by TCP to track its memory usage. -The -defaults are calculated at boot time from the amount of -available memory. -(TCP can only use -.I "low memory" -for this, which is limited to around 900 megabytes on 32-bit systems. -64-bit systems do not suffer this limitation.) - -.I low -- TCP doesn't regulate its memory allocation when the number -of pages it has allocated globally is below this number. - -.I pressure -- when the amount of memory allocated by TCP -exceeds this number of pages, TCP moderates its memory consumption. -This memory pressure state is exited -once the number of pages allocated falls below -the -.I low -mark. - -.I high -- the maximum number of pages, globally, that TCP -will allocate. -This value overrides any other limits -imposed by the kernel. -.TP -.BR tcp_orphan_retries " (integer; default: 8)" -The maximum number of attempts made to probe the other -end of a connection which has been closed by our end. -.TP -.BR tcp_reordering " (integer; default: 3)" -The maximum a packet can be reordered in a TCP packet stream -without TCP assuming packet loss and going into slow start. -It is not advisable to change this number. -This is a packet reordering detection metric designed to -minimize unnecessary back off and retransmits provoked by -reordering of packets on a connection. -.TP -.BR tcp_retrans_collapse " (Boolean; default: enabled)" -Try to send full-sized packets during retransmit. -.TP -.BR tcp_retries1 " (integer; default: 3)" -The number of times TCP will attempt to retransmit a -packet on an established connection normally, -without the extra effort of getting the network -layers involved. -Once we exceed this number of -retransmits, we first have the network layer -update the route if possible before each new retransmit. -The default is the RFC specified minimum of 3. -.TP -.BR tcp_retries2 " (integer; default: 15)" -The maximum number of times a TCP packet is retransmitted -in established state before giving up. -The default -value is 15, which corresponds to a duration of -approximately between 13 to 30 minutes, depending -on the retransmission timeout. -The RFC\ 1122 specified -minimum limit of 100 seconds is typically deemed too -short. -.TP -.BR tcp_rfc1337 " (Boolean; default: disabled)" -Enable TCP behavior conformant with RFC\ 1337. -When disabled, -if a RST is received in TIME_WAIT state, we close -the socket immediately without waiting for the end -of the TIME_WAIT period. -.TP -.I tcp_rmem -This is a vector of 3 integers: [min, default, -max]. -These parameters are used by TCP to regulate receive -buffer sizes. -TCP dynamically adjusts the size of the -receive buffer from the defaults listed below, in the range -of these sysctl variables, depending on memory available -in the system. -.RS -.TP 9 -.I min -minimum size of the receive buffer used by each TCP socket. -The default value is 4K, and is lowered to -.B PAGE_SIZE -bytes in low-memory systems. -This value -is used to ensure that in memory pressure mode, -allocations below this size will still succeed. -This is not -used to bound the size of the receive buffer declared -using -.B SO_RCVBUF -on a socket. -.TP -.I default -the default size of the receive buffer for a TCP socket. -This value overwrites the initial default buffer size from -the generic global -.I net.core.rmem_default -defined for all protocols. -The default value is 87380 -bytes, and is lowered to 43689 in low-memory systems. -If larger receive buffer sizes are desired, this value should -be increased (to affect all sockets). -To employ large TCP -windows, the -.I net.ipv4.tcp_window_scaling -must be enabled (default). -.TP -.I max -the maximum size of the receive buffer used by -each TCP socket. -This value does not override the global -.IR net.core.rmem_max . -This is not used to limit the size of the receive buffer -declared using -.B SO_RCVBUF -on a socket. -The default value of 87380*2 bytes is lowered to 87380 -in low-memory systems. -.RE -.TP -.BR tcp_sack " (Boolean; default: enabled)" -Enable RFC\ 2018 TCP Selective Acknowledgements. -.TP -.BR tcp_stdurg " (Boolean; default: disabled)" -If this option is enabled, then use the RFC\ 1122 interpretation -of the TCP urgent-pointer field. -.\" RFC 793 was ambiguous in its specification of the meaning of the -.\" urgent pointer. RFC 1122 (and RFC 961) fixed on a particular -.\" resolution of this ambiguity (unfortunately the "wrong" one). -According to this interpretation, the urgent pointer points -to the last byte of urgent data. -If this option is disabled, then use the BSD-compatible interpretation of -the urgent pointer: -the urgent pointer points to the first byte after the urgent data. -Enabling this option may lead to interoperability problems. -.TP -.BR tcp_synack_retries " (integer; default: 5)" -The maximum number of times a SYN/ACK segment -for a passive TCP connection will be retransmitted. -This number should not be higher than 255. -.TP -.BR tcp_syncookies " (Boolean)" -Enable TCP syncookies. -The kernel must be compiled with -.BR CONFIG_SYN_COOKIES . -Send out syncookies when the syn backlog queue of a socket -overflows. -The syncookies feature attempts to protect a -socket from a SYN flood attack. -This should be used as a -last resort, if at all. -This is a violation of the TCP -protocol, and conflicts with other areas of TCP such as TCP -extensions. -It can cause problems for clients and relays. -It is not recommended as a tuning mechanism for heavily -loaded servers to help with overloaded or misconfigured -conditions. -For recommended alternatives see -.IR tcp_max_syn_backlog , -.IR tcp_synack_retries , -and -.IR tcp_abort_on_overflow . -.TP -.BR tcp_syn_retries " (integer; default: 5)" -The maximum number of times initial SYNs for an active TCP -connection attempt will be retransmitted. -This value should -not be higher than 255. -The default value is 5, which -corresponds to approximately 180 seconds. -.TP -.BR tcp_timestamps " (Boolean; default: enabled)" -Enable RFC\ 1323 TCP timestamps. -.TP -.BR tcp_tw_recycle " (Boolean; default: disabled)" -Enable fast recycling of TIME_WAIT sockets. -Enabling this option is not -recommended since this causes problems when working -with NAT (Network Address Translation). -.\" -.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt -.TP -.BR tcp_tw_reuse " (Boolean; default: disabled)" -Allow to reuse TIME_WAIT sockets for new connections when it is -safe from protocol viewpoint. -It should not be changed without advice/request of technical -experts. -.TP -.BR tcp_window_scaling " (Boolean; default: enabled)" -Enable RFC\ 1323 TCP window scaling. -This feature allows the use of a large window -(> 64K) on a TCP connection, should the other end support it. -Normally, the 16 bit window length field in the TCP header -limits the window size to less than 64K bytes. -If larger -windows are desired, applications can increase the size of -their socket buffers and the window scaling option will be -employed. -If -.I tcp_window_scaling -is disabled, TCP will not negotiate the use of window -scaling with the other end during connection setup. -.\" -.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt -.TP -.BR tcp_vegas_cong_avoid " (Boolean; default: disabled)" -Enable TCP Vegas congestion avoidance algorithm. -TCP Vegas is a sender-side only change to TCP that anticipates -the onset of congestion by estimating the bandwidth. -TCP Vegas -adjusts the sending rate by modifying the congestion -window. -TCP Vegas should provide less packet loss, but it is -not as aggressive as TCP Reno. -.\" -.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt -.TP -.BR tcp_westwood " (Boolean; default: disabled)" -Enable TCP Westwood+ congestion control algorithm. -TCP Westwood+ is a sender-side only modification of the TCP Reno -protocol stack that optimizes the performance of TCP congestion -control. -It is based on end-to-end bandwidth estimation to set -congestion window and slow start threshold after a congestion -episode. -Using this estimation, TCP Westwood+ adaptively sets a -slow start threshold and a congestion window which takes into -account the bandwidth used at the time congestion is experienced. -TCP Westwood+ significantly increases fairness with respect to -TCP Reno in wired networks and throughput over wireless links. -.TP -.I tcp_wmem -This is a vector of 3 integers: [min, default, max]. -These parameters are used by TCP to regulate send buffer sizes. -TCP dynamically adjusts the size of the send buffer from the -default values listed below, in the range of these sysctl -variables, depending on memory available. - -.I min -- minimum size of the send buffer used by each TCP socket. -The default value is 4K bytes. -This value is used to ensure that in memory pressure mode, -allocations below this size will still succeed. -This is not -used to bound the size of the send buffer declared -using -.B SO_SNDBUF -on a socket. - -.I default -- the default size of the send buffer for a TCP socket. -This value overwrites the initial default buffer size from -the generic global -.I net.core.wmem_default -defined for all protocols. -The default value is 16K bytes. -If larger send buffer sizes are desired, this value -should be increased (to affect all sockets). -To employ large TCP windows, the sysctl variable -.I net.ipv4.tcp_window_scaling -must be enabled (default). - -.I max -- the maximum size of the send buffer used by -each TCP socket. -This value does not override the global -.IR net.core.wmem_max . -This is not used to limit the size of the send buffer -declared using -.B SO_SNDBUF -on a socket. -The default value is 128K bytes. -It is lowered to 64K -depending on the memory available in the system. -.SS Socket Options -To set or get a TCP socket option, call -.BR getsockopt (2) -to read or -.BR setsockopt (2) -to write the option with the option level argument set to -.BR IPPROTO_TCP . -.\" or SOL_TCP on Linux -In addition, -most -.B IPPROTO_IP -socket options are valid on TCP sockets. -For more information see -.BR ip (7). -.\" FIXME Document TCP_CONGESTION (new in 2.6.13) -.TP -.B TCP_CORK -If set, don't send out partial frames. -All queued -partial frames are sent when the option is cleared again. -This is useful for prepending headers before calling -.BR sendfile (2), -or for throughput optimization. -As currently implemented, there is a 200 millisecond ceiling on the time -for which output is corked by -.BR TCP_CORK . -If this ceiling is reached, then queued data is automatically transmitted. -This option can be -combined with -.B TCP_NODELAY -only since Linux 2.5.71. -This option should not be used in code intended to be -portable. -.TP -.B TCP_DEFER_ACCEPT -Allows a listener to be awakened only when data arrives on -the socket. -Takes an integer value (seconds), this can -bound the maximum number of attempts TCP will make to -complete the connection. -This option should not be used in -code intended to be portable. -.TP -.B TCP_INFO -Used to collect information about this socket. -The kernel returns a \fIstruct tcp_info\fP as defined in the file -.IR /usr/include/linux/tcp.h . -This option should not be used in code intended to be portable. -.TP -.B TCP_KEEPCNT -The maximum number of keepalive probes TCP should send -before dropping the connection. -This option should not be -used in code intended to be portable. -.TP -.B TCP_KEEPIDLE -The time (in seconds) the connection needs to remain idle -before TCP starts sending keepalive probes, if the socket -option -.B SO_KEEPALIVE -has been set on this socket. -This option should not be used in code intended to be portable. -.TP -.B TCP_KEEPINTVL -The time (in seconds) between individual keepalive probes. -This option should not be used in code intended to be -portable. -.TP -.B TCP_LINGER2 -The lifetime of orphaned FIN_WAIT2 state sockets. -This option can be used to override the system wide sysctl -.I tcp_fin_timeout -on this socket. -This is not to be confused with the -.BR socket (7) -level option -.BR SO_LINGER . -This option should not be used in code intended to be -portable. -.TP -.B TCP_MAXSEG -The maximum segment size for outgoing TCP packets. -If this option is set before connection establishment, it also -changes the MSS value announced to the other end in the -initial packet. -Values greater than the (eventual) interface MTU have no effect. -TCP will also impose -its minimum and maximum bounds over the value provided. -.TP -.B TCP_NODELAY -If set, disable the Nagle algorithm. -This means that segments -are always sent as soon as possible, even if there is only a -small amount of data. -When not set, data is buffered until there -is a sufficient amount to send out, thereby avoiding the -frequent sending of small packets, which results in poor -utilization of the network. -This option is overridden by -.BR TCP_CORK ; -however, setting this option forces an explicit flush of -pending output, even if -.B TCP_CORK -is currently set. -.TP -.B TCP_QUICKACK -Enable quickack mode if set or disable quickack -mode if cleared. -In quickack mode, acks are sent -immediately, rather than delayed if needed in accordance -to normal TCP operation. -This flag is not permanent, -it only enables a switch to or from quickack mode. -Subsequent operation of the TCP protocol will -once again enter/leave quickack mode depending on -internal protocol processing and factors such as -delayed ack timeouts occurring and data transfer. -This option should not be used in code intended to be -portable. -.TP -.B TCP_SYNCNT -Set the number of SYN retransmits that TCP should send before -aborting the attempt to connect. -It cannot exceed 255. -This option should not be used in code intended to be -portable. -.TP -.B TCP_WINDOW_CLAMP -Bound the size of the advertised window to this value. -The kernel imposes a minimum size of SOCK_MIN_RCVBUF/2. -This option should not be used in code intended to be -portable. -.SS Ioctls -These following -.BR ioctl (2) -calls return information in -.IR value . -The correct syntax is: -.PP -.RS -.nf -.BI int " value"; -.IB error " = ioctl(" tcp_socket ", " ioctl_type ", &" value ");" -.fi -.RE -.PP -.I ioctl_type -is one of the following: -.TP -.B SIOCINQ -Returns the amount of queued unread data in the receive buffer. -The socket must not be in LISTEN state, otherwise an error -.RB ( EINVAL ) -is returned. -.TP -.B SIOCATMARK -Returns true (i.e., -.I value -is non-zero) if the inbound data stream is at the urgent mark. - -If the -.B SO_OOBINLINE -socket option is set, and -.B SIOCATMARK -returns true, then the -next read from the socket will return the urgent data. -If the -.B SO_OOBINLINE -socket option is not set, and -.B SIOCATMARK -returns true, then the -next read from the socket will return the bytes following -the urgent data (to actually read the urgent data requires the -.B recv(MSG_OOB) -flag). - -Note that a read never reads across the urgent mark. -If an application is informed of the presence of urgent data via -.BR select (2) -(using the -.I exceptfds -argument) or through delivery of a -.B SIGURG -signal, -then it can advance up to the mark using a loop which repeatedly tests -.B SIOCATMARK -and performs a read (requesting any number of bytes) as long as -.B SIOCATMARK -returns false. -.TP -.B SIOCOUTQ -Returns the amount of unsent data in the socket send queue. -The socket must not be in LISTEN state, otherwise an error -.RB ( EINVAL ) -is returned. -.SS Error Handling -When a network error occurs, TCP tries to resend the packet. -If it doesn't succeed after some time, either -.B ETIMEDOUT -or the last received error on this connection is reported. -.PP -Some applications require a quicker error notification. -This can be enabled with the -.B IPPROTO_IP -level -.B IP_RECVERR -socket option. -When this option is enabled, all incoming -errors are immediately passed to the user program. -Use this -option with care \(em it makes TCP less tolerant to routing -changes and other normal network conditions. -.SH ERRORS -.TP -.B EAFNOTSUPPORT -Passed socket address type in -.I sin_family -was not -.BR AF_INET . -.TP -.B EPIPE -The other end closed the socket unexpectedly or a read is -executed on a shut down socket. -.TP -.B ETIMEDOUT -The other end didn't acknowledge retransmitted data after -some time. -.PP -Any errors defined for -.BR ip (7) -or the generic socket layer may also be returned for TCP. -.SH VERSIONS -Support for Explicit Congestion Notification, zero-copy -.BR sendfile (2), -reordering support and some SACK extensions -(DSACK) were introduced in 2.4. -Support for forward acknowledgement (FACK), TIME_WAIT recycling, -per connection keepalive socket options and sysctls -were introduced in 2.3. - -The default values and descriptions for the sysctl variables -given above are applicable for the 2.4 kernel. -.SH NOTES -TCP has no real out-of-band data; it has urgent data. -In Linux this means if the other end sends newer out-of-band -data the older urgent data is inserted as normal data into -the stream (even when -.B SO_OOBINLINE -is not set). -This differs from BSD-based stacks. -.PP -Linux uses the BSD compatible interpretation of the urgent -pointer field by default. -This violates RFC\ 1122, but is -required for interoperability with other stacks. -It can be changed by the -.I tcp_stdurg -sysctl. -.SH BUGS -Not all errors are documented. -.br -IPv6 is not described. -.\" Only a single Linux kernel version is described -.\" Info for 2.2 was lost. Should be added again, -.\" or put into a separate page. -.\" .SH AUTHORS -.\" This man page was originally written by Andi Kleen. -.\" It was updated for 2.4 by Nivedita Singhvi with input from -.\" Alexey Kuznetsov's Documentation/networking/ip-sysctl.txt -.\" document. -.SH "SEE ALSO" -.BR accept (2), -.BR bind (2), -.BR connect (2), -.BR getsockopt (2), -.BR listen (2), -.BR recvmsg (2), -.BR sendfile (2), -.BR sendmsg (2), -.BR socket (2), -.BR sysctl (2), -.BR ip (7), -.BR socket (7) -.sp -RFC\ 793 for the TCP specification. -.br -RFC\ 1122 for the TCP requirements and a description -of the Nagle algorithm. -.br -RFC\ 1323 for TCP timestamp and window scaling options. -.br -RFC\ 1644 for a description of TIME_WAIT assassination -hazards. -.br -RFC\ 3168 for a description of Explicit Congestion -Notification. -.br -RFC\ 2581 for TCP congestion control algorithms. -.br -RFC\ 2018 and RFC\ 2883 for SACK and extensions to SACK. +.TH TCP 7 2008-08-07 "Linux" "Linux Programmer's Manual" +.TH TCP 7 2008-08-07 "Linux" "Linux Programmer's Manual" +.TH TCP 7 2008-08-07 "Linux" "Linux Programmer's Manual" +.TH TCP 7 2008-08-07 "Linux" "Linux Programmer's Manual" +.TH TCP 7 2008-08-07 "Linux" "Linux Programmer's Manual" +.TH TCP 7 2008-08-07 "Linux" "Linux Programmer's Manual" +.TH TCP 7 2008-08-07 "Linux" "Linux Programmer's Manual" +.TH TCP 7 2008-08-07 "Linux" "Linux Programmer's Manual" |
