Протокол управления передачей
#include <sys/socket.h>#include <netinet/in.h>int socket( AF_INET,SOCK_STREAM,0 );
Протокол TCP обеспечивает надежную двустороннюю передачу данных с контролем потока. Это протокол потока байт, используемый для поддержки абстракции SOCK_STREAM
.
TCP использует стандартный формат Интернет-адресов, а также предоставляет набор «адресов портов» для каждого хоста. Таким образом, каждый адрес состоит из Интернет-адреса, определяющего хост и сеть, с конкретным TCP-портом на хосте, идентифицирующим пира.
Сокеты, использующие протокол TCP, могут быть active или passive. Активные сокеты инициируют подключения к пассивным сокетам. По умолчанию сокеты TCP создаются активными.
Для создания пассивного сокета, необходимо привязать сокет при помощи системного вызова bind(), затем вызвать listen(). Только пассивные сокеты могут использовать вызов accept() для принятия входящих соединений; только активные сокеты могут использовать вызов connect() для инициирования соединений.
Пассивные сокеты могут «занижать» свое местоположение, чтобы соответствовать входящим запросам на соединение из нескольких сетей. С помощью этого метода, называемого адресацией с подстановочными знаками (wildcard addressing), один сервер может предоставлять услуги клиентам в нескольких сетях. Если требуется создать сокет, который прослушивает все сети, необходимо привязать интернет-адрес INADDR_ANY
. В это время также можно указать TCP-порт. Если порт не указан, система его назначает самостоятельно.
После того, как соединение установлено, адрес сокета фиксируется местоположением пира. Адрес, назначенный сокету - это адрес, связанный с сетевым интерфейсом, через который пакеты передаются и принимаются. Обычно этот адрес соответствует сети пира.
TCP поддерживает несколько вариантов сокетов (определенных в <netinet/tcp.h>
) которые можно задать при помощи setsockopt() и получить при помощи getsockopt(). Уровень опций для этих вызовов - это номер протокола для TCP, доступный из getprotobyname().
TCP_NODELAY
, чтобы обойти этот алгоритм. 2
часа. Этот параметр действует, только если установлен параметр сокета SO_KEEPALIVE
. Возможно использование параметров на транспортном уровне IP с TCP (см. протокол IP. Входящие запросы на соединение с маршрутизацией от источника сохраняются, а обратный маршрут от источника используется при ответе.
Дескриптор сокета. Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
IP protocol
accept(), bind(), connect(), getprotobyname(), getsockopt(), listen(), setsockopt(), socket()
Основано на RFC 793
Предыдущий раздел: Описание API сетевой библиотеки