tcp(4P) tcp(4P)
NAME
TCP - Internet Transmission Control Protocol
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
s = socket(AFINET, SOCKSTREAM, 0);
t = topen("/dev/tcp", ORDWR);
DESCRIPTION
TCP is the virtual circuit protocol of the Internet protocol
family. It provides reliable, flow-controlled, in order,
two-way transmission of data. It is a byte-stream protocol
layered above the Internet Protocol (IP), the Internet pro-
tocol family's internetwork datagram delivery protocol.
Programs can access TCP using the socket interface as a
SOCKSTREAM socket type, or using the Transport Level Inter-
face (TLI) where it supports the connection-oriented
(TCOTSORD) service type.
TCP uses IP's host-level addressing and adds its own per-
host collection of port addresses. The endpoints of a TCP
connection are identified by the combination of an IP
address and a TCP port number. Although other protocols,
such as the User Datagram Protocol (UDP), may use the same
host and port address format, the port space of these proto-
cols is distinct. See inet(4F) for details on the common
aspects of addressing in the Internet protocol family.
Sockets utilizing TCP are either active or passive. Active
sockets initiate connections to passive sockets. Both types
of sockets must have their local IP address and TCP port
number bound with the bind(2) system call after the socket
is created. By default, TCP sockets are active. A passive
socket is created by calling the listen(2) system call after
binding the socket with bind(). This establishes a queueing
parameter for the passive socket. After this, connections
to the passive socket can be received with the accept(2)
system call. Active sockets use the connect(2) call after
binding to initiate connections.
By using the special value INADDRANY, the local IP address
can be left unspecified in the bind() call by either active
or passive TCP sockets. This feature is usually used if the
local address is either unknown or irrelevant. If left
unspecified, the local IP address will be bound at connec-
tion time to the address of the network interface used to
service the connection.
Page 1 CX/UX Networking
tcp(4P) tcp(4P)
Once a connection has been established, data can be
exchanged using the read(2) and write(2) system calls.
TCP supports one socket option which is set with set-
sockopt() and tested with getsockopt(2). Under most cir-
cumstances, TCP sends data when it is presented. When out-
standing 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 packetization may
cause significant delays. Therefore, TCP provides a boolean
option, TCPNODELAY (defined in /usr/include/netinet/tcp.h),
to defeat this algorithm. The option level for the set-
sockopt() call is the protocol number for TCP, available
from getprotobyname() [see getprotoent(3N)].
Options at the IP level may be used with TCP; See ip(4P).
TCP provides an urgent data mechanism, which may be invoked
using the out-of-band provisions of send(2). The caller may
mark one byte as urgent with the MSGOOB flag to send(2).
This sets an urgent pointer pointing to this byte in the TCP
stream. The receiver on the other side of the stream is
notified of the urgent data by a SIGURG signal. The SIOCAT-
MARK ioctl() request returns a value indicating whether the
stream is at the urgent mark. Because the system never
returns data across the urgent mark in a single read(2)
call, it is possible to advance to the urgent data in a sim-
ple loop which reads data, testing the socket with the
SIOCATMARK ioctl() request, until it reaches the mark.
Incoming connection requests that include an IP source route
option are noted, and the reverse source route is used in
responding.
A checksum over all data helps TCP implement reliability.
Using a window-based flow control mechanism that makes use
of positive acknowledgements, sequence numbers, and a
retransmission strategy, TCP can usually recover when
datagrams are damaged, delayed, duplicated or delivered out
of order by the underlying communication medium.
If the local TCP receives no acknowledgements from its peer
for a period of time, as would be the case if the remote
machine crashed, the connection is closed and an error is
returned to the user. If the remote machine reboots or oth-
erwise loses state information about a TCP connection, the
Page 2 CX/UX Networking
tcp(4P) tcp(4P)
connection is aborted and an error is returned to the user.
SEE ALSO
bind(2), connect(2), getsockopt(2), listen(2), read(2),
send(2), write(2), accept(2), getprotoent(3N), intro(3N),
inet(4F), ip(4P).
CX/UX Networking Reference Manual
DIAGNOSTICS
A socket operation may fail if:
EISCONN A connect() operation was attempted on a
socket on which a connect() operation
had already been performed.
ETIMEDOUT A connection was dropped due to exces-
sive retransmissions.
ECONNRESET The remote peer forced the connection to
be closed (usually because the remote
machine has lost state information about
the connection due to a crash).
ECONNREFUSED The remote peer actively refused connec-
tion establishment (usually because no
process is listening to the port).
EADDRINUSE A bind() operation was attempted on a
socket with a network address/port pair
that has already been bound to another
socket.
EADDRNOTAVAIL A bind() operation was attempted on a
socket with a network address for which
no network interface exists.
EACCES A bind() operation was attempted with a
reserved port number and the effective
user ID of the process was not the
privileged user.
ENOBUFS The system ran out of memory for inter-
nal data structures.
Page 3 CX/UX Networking