|
|
HP-UX Reference Volume 5 of 5 > tTCP(7P) |
|
NAMETCP — Internet Transmission Control Protocol SYNOPSIS#include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> s = socket(AF_INET, SOCK_STREAM, 0); DESCRIPTIONThe TCP protocol provides reliable, flow-controlled, two-way transmission of data. It is a byte-stream protocol used to support the SOCK_STREAM socket type. TCP constructs virtual circuits between peer entities. A virtual circuit consists of remote Internet addresses, remote ports, local Internet addresses and local ports. IP uses the Internet addresses to direct messages between hosts, and the port numbers to identify a TCP entity at a particular host. Sockets using TCP are either active or passive. connect() creates active sockets, which initiate connections to passive sockets (see connect(2)). To create a passive socket, use the listen() system call after binding the socket with the bind() system call (see listen(2) and bind(2)). Only passive sockets can use the accept() call to accept incoming connections (see accept(2)). Passive sockets can underspecify their location to match incoming connection requests from multiple networks. This technique, called 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 must be bound. The TCP port can still be specified even if wildcard addressing is being used. If the port is specified as zero, the system assigns a port. Once accept() has a rendezvous with a connect request, a virtual circuit is established between peer entities. bind() supplies the local port and local Internet address and accept() gathers the remote port and remote Internet address from the peer requesting the connection. The system supports four socket options: TCP_MAXSEG, TCP_NODELAY, TCP_ABORT_THRESHOLD, and TCP_CONN_ABORT_THRESHOLD (defined in the include file <netinet/tcp.h>). TCP_MAXSEG option can only be used with getsockopt(), while TCP_NODELAY, TCP_ABORT_THRESHOLD, and TCP_CONN_ABORT_THRESHOLD can be set with setsockopt() and tested with getsockopt() (see getsockopt(2)). These four options require level to be set to IPPROTO_TCP in the getsockopt/setsockopt call.
If TCP_NODELAY is set, the system sends small amounts of output immediately rather than gathering them into a single packet after an acknowledgement is received. If TCP_NODELAY is not set, the system sends data when it is presented, if there is no outstanding unacknowledged data. If there is outstanding unacknowledged data, the system gathers small amounts of data to be sent in a single packet once an acknowledgement is received. For clients such as window managers that send a stream of mouse events which receive no replies, this packetization may cause significant delays. The TCP_NODELAY option can be used to avoid this situation. Note, however, that setting the TCP_NODELAY option may result in a large number of small packets being sent over the network. By default, TCP_NODELAY is not set when a socket is created. The option level to use for accessing the TCP option with the setsockopt() or getsockopt() calls is the protocol number for TCP which is available from getprotobyname() (see getprotoent(3N)). If the SO_KEEPALIVE socket option is enabled on an established TCP connection and the connection has been idle for two hours, TCP sends a packet to the remote socket, expecting the remote TCP to acknowledge that the connection is still active. If the remote TCP does not respond in a timely manner, TCP continues to send keepalive packets according to its normal retransmission algorithm. If the remote TCP does not respond within a particular time limit, TCP drops the connection. The next socket system call (for example, recv()) returns an error, and errno is set to ETIMEDOUT. See getsockopt(2) for details on enabling SO_KEEPALIVE. The maximum buffer size for a TCP stream socket is 262142 bytes. The default buffer size is 32768 bytes (see WARNINGS below). The send and receive buffer sizes for TCP stream sockets can be altered by using the SO_SNDBUF and SO_RCVBUF options of the setsockopt() system call. Refer to getsockopt(2) for details. ERRORSOne of the following errors may be returned in errno if a socket operation fails. For a more detailed list of errors, see the man pages for specific system calls.
WARNINGSThe default socket buffer size might increase without notice in a future release or patch. Therefore, if an application calls setsockopt() with SO_RCVBUF, it should do so before calling listen(), or it should first call getsockopt() with SO_RCVBUF and ensure that the intended new receive buffer size is not less than the current buffer size. These programming conventions are consistent with TCP protocol restrictions against reducing the TCP receive window after a connection has been established. |
|