aboutsummaryrefslogtreecommitdiffstats
path: root/man7/tcp.7
diff options
context:
space:
mode:
authorMichael Kerrisk <mtk.manpages@gmail.com>2008-08-08 16:28:06 +0000
committerMichael Kerrisk <mtk.manpages@gmail.com>2008-08-08 16:28:06 +0000
commit10874173dba2edf045eebd9e85945970182dbaf6 (patch)
treeec42e47e1a8fc25ca4e816fd99a570404f3aa5c5 /man7/tcp.7
parentea6ac50ed39e1c963454c837065ef7beeaccb0b8 (diff)
downloadman-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.7955
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"