 |
Index for Section 7 |
|
 |
Alphabetical listing for T |
|
 |
Bottom of page |
|
tcp(7)
NAME
tcp - Internet Transmission Control Protocol (TCP)
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
The following is the socket call for AF_INET sockets:
s = socket(AF_INET, SOCK_STREAM, 0);
The following is the socket call for AF_INET6 sockets:
s = socket(AF_INET6, SOCK_STREAM, 0);
DESCRIPTION
The TCP protocol provides reliable, flow-controlled, two-way transmission
of data. It is a byte-stream protocol used to support the SOCK_STREAM
abstraction. The TCP protocol uses the standard Internet address format
and, in addition, provides a per-host collection of port addresses. Thus,
each address is composed of an Internet address specifying the host and
network, with a specific TCP port on the host identifying the peer entity.
Sockets utilizing the TCP are either active or passive. Active sockets
initiate connections to passive sockets. By default, TCP sockets are
created active; to create a passive socket the listen() function must be
used after binding the socket with the bind() function. Only passive
sockets may use the accept() function to accept incoming connections. Only
active sockets may use the connect() function to initiate connections.
Passive sockets may underspecify their location to match incoming
connection requests from multiple networks. This technique, termed
wildcard addressing, allows a single server to provide service to clients
on multiple networks. To create a socket that listens on all networks, the
Internet address INADDR_ANY (for AF_INET sockets) or in6addr_any (for
AF_INET6 sockets) must be bound. The TCP port may still be specified at
this time; if the port is not specified the system will assign one. Once a
connection has been established, the socket's address is fixed by the peer
entity's location. The address assigned to the socket is the address
associated with the network interface through which packets are being
transmitted and received. Normally this address corresponds to the peer
entity's network.
TCP supports the following socket options:
TCP_KEEPCNT
When the SO_KEEPALIVE option is enabled, TCP probes a connection that
has been idle for some amount of time. If the remote system does not
respond to a keepalive probe, TCP retransmits the probe a certain
number of times before a connection is considered to be broken. The
default value for this keepalive probe retransmit limit is 8. The
TCP_KEEPCNT option can be used to affect this value for a given socket,
and specifies the maximum number of keepalive probes to be sent. This
option takes an int value, with a range of 1 to tcp_keepcnt. For more
information on tcp_keepcnt see the information on the inet subsystem
configuration attributes in the System Configuration and Tuning guide.
TCP_KEEPIDLE
When the SO_KEEPALIVE option is enabled, TCP probes a connection that
has been idle for some amount of time. The default value for this idle
period is 2 hours. The TCP_KEEPIDLE option can be used to affect this
value for a given socket, and specifies the number of seconds of idle
time between keepalive probes. This option takes an int value, with a
range of 1 to N (where N is tcp_keepidle divided by PR_SLOWHZ). For
more information on tcp_keepidle see the information on the inet
subsystem configuration attributes in the System Configuration and
Tuning guide. PR_SLOWHZ is defined in the <sys/protosw.h> header file.
TCP_KEEPINIT
If a TCP connection cannot be established within some amount of time,
TCP will time out the connect attempt. The default value for this
initial connection establishment timeout is 75 seconds. The
TCP_KEEPINIT option can be used to affect this initial timeout period
for a given socket, and specifies the number of seconds to wait before
the connect attempt is timed out. For passive connections, the
TCP_KEEPINIT option value is inherited from the listening socket. This
option takes an int value, with a range of 1 to N (where N is
tcp_keepinit divided by PR_SLOWHZ). For more information on
tcp_keepinit see the information on the inet subsystem configuration
attributes in the System Configuration and Tuning guide. PR_SLOWHZ is
defined in the <sys/protosw.h> header file.
TCP_KEEPINTVL
When the SO_KEEPALIVE option is enabled, TCP probes a connection that
has been idle for some amount of time. If the remote system does not
respond to a keepalive probe, TCP retransmits the probe after some
amount of time. The default value for this retransmit interval is 75
seconds. The TCP_KEEPINTVL option can be used to affect this value for
a given socket, and specifies the number of seconds to wait before
retransmitting a keepalive probe. This option takes an int value, with
a range of 1 to N (where N is tcp_keepintvl divided by PR_SLOWHZ). For
more information on tcp_keepintvl see the information on the inet
subsystem configuration attributes in the System Configuration and
Tuning guide. PR_SLOWHZ is defined in the <sys/protosw.h> header file.
TCP_MAXSEG
The maximum size of a TCP segment is based on the network MTU for
destinations on local networks or on a default MTU of 576 bytes for
destinations on nonlocal networks. The default behavior can be altered
by setting the TCP_MAXSEG option to an integer value from 1 to 65,535.
However, TCP will not use a maximum segment size smaller than 32 or
larger than the local network MTU. Setting the TCP_MAXSEG option to a
value of zero results in default behavior. The TCP_MAXSEG option can
only be set prior to calling listen or connect on the socket. For
passive connections, the TCP_MAXSEG option value is inherited from the
listening socket. This option takes an int value, with a range of 0 to
65535.
TCP_NODELAY
Under most circumstances, TCP sends data when it is presented; when
outstanding data has not yet been acknowledged, it gathers small
amounts of output to be sent in a single packet once an acknowledgement
is received. For a small number of clients, such as window systems
that send a stream of mouse events which receive no replies, this
gathering of output can cause significant delays. Therefore, TCP
provides a Boolean option, TCP_NODELAY (from the netinet/tcp.h header
file), to defeat this algorithm. This option takes an int value.
TCP_TSOPTENA
When this option is enabled, the sender places a timestamp in each data
segment. The receiver, if configured to accept them, sends these
timestamps back in ACK segments. This provides the sender with a
mechanism with which to measure round-trip time. TCP provides a Boolean
option, TCP_TSOPTENA (from the netinet/tcp.h header file) to enable or
disable this option. This option takes an int value.
TCP_PAWS
When the PAWS (Protect Against Wrapped Sequence numbers) option is
enabled, the receiver rejects any old duplicate segments that are
received. This option is used on synchronized TCP connections only.
TCP provides a Boolean option, TCP_PAWS (from the netinet/tcp.h header
file) to enable or disable this option. This option takes an int
value. In order to use this option, you must also enable the
TCP_TSOPTENA option.
TCP_SACKENA
When the Selective Acknowledgment (SACK) option is enabled, the data
receiver can inform the sender about all segments that have arrived
successfully. In this way, the sender need retransmit only those
segments that have actually been lost. This option is useful in cases
where multiple segments are dropped. TCP provides a Boolean option,
TCP_SACKENA (from the netinet/tcp.h header file) to enable or disable
this option. This option takes an int value.
These options can be retrieved with the getsockopt() function and set with
the setsockopt() function.
The option level for the setsockopt() and getsockopt() functions is the
protocol number for TCP, available from the getprotobyname() function.
Options at the IP transport level may be used with TCP; see ip(7).
Incoming connection requests that are source-routed are noted, and the
reverse source route is used in responding.
ERRORS
If a socket operation fails, errno may be set to one of the following
values:
[EINVAL]
The option_len parameter provided to the setsockopt() or
getsockopt() function is less than sizeof(int) or the option_value
parameter provided to the setsockopt() function is outside the
valid range for the option.
[EISCONN]
The socket to be connected already has a connection.
[ENOBUFS]
The system ran out of memory for an internal data structure.
[EOPNOTSUPP]
Setting the TCP_MAXSEG option is not supported after connect() or
listen().
[ETIMEDOUT]
A connection was dropped due to excessive retransmissions.
[ECONNRESET]
The remote peer forced the connection to be closed.
[ECONNREFUSED]
The remote peer actively refuses connection establishment (usually
because no process is listening to the port).
[EADDRINUSE]
An attempt is made to create a socket with a port which has already
been allocated.
[EADDRNOTAVAIL]
An attempt is made to create a socket with a network address for
which no network interface exists.
SEE ALSO
Functions: getsockopt(2), socket(2)
Network Information: netintro(7), inet(7), ip(7)
 |
Index for Section 7 |
|
 |
Alphabetical listing for T |
|
 |
Top of page |
|