Шрифт:
Мы также опишем параллельные (concurrent) серверы — типичную технологию Unix для обеспечения параллельной обработки множества клиентов одним сервером. Подключение очередного клиента заставляет сервер выполнить функцию
На рис. 4.1 представлен типичный сценарий взаимодействия, происходящего между клиентом и сервером. Сначала запускается сервер, затем, спустя некоторое время, запускается клиент, который соединяется с сервером. Предполагается, что клиент посылает серверу запрос, сервер этот запрос обрабатывает и посылает клиенту ответ. Так продолжается, пока клиентская сторона не закроет соединение, посылая при этом серверу признак конца файла. Затем сервер закрывает свой конец соединения и либо завершает работу, либо ждет подключения нового клиента.
Рис. 4.1. Функции сокетов для элементарного клиент-серверного соединения TCP
4.2. Функция socket
Чтобы обеспечить сетевой ввод-вывод, процесс должен начать работу с вызова функции
Константа
Таблица 4.1. Константы протокола (family) для функции socket
Семейство сокетов (family) | Описание |
---|---|
AF_INET | Протоколы IPv4 |
AF_INET6 | Протоколы IPv6 |
AF_LOCAL | Протоколы доменных сокетов Unix (см. главу 14) |
AF_ROUTE | Маршрутизирующие сокеты (см. главу 17) |
AF_KEY | Сокет управления ключами |
Таблица 4.2. Тип сокета для функции socket
Тип (type) | Описание |
---|---|
SOCK STREAM | Потоковый сокет |
SOCK_DGRAM | Сокет дейтаграмм |
SOCK_SEQPACKET | Сокет последовательных пакетов |
SOCK_RAW | Символьный (неструктурированный) сокет |
Таблица 4.3. Возможные значения параметра protocol
Protocol | Значение |
---|---|
IPPROTO_TCP | Транспортный протокол TCP |
IPPROTO_UDP | Транспортный протокол UDP |
IPPROTO_SCTP | Транспортный протокол SCTP |
Не все сочетания констант
Таблица 4.4. Сочетания констант family и type для функции socket
AF_INET | AF_INET6 | AF_LOCAL | AF_ROUTE | AF_KEY | |
---|---|---|---|---|---|
SOCK_STREAM | TCP/SCTP | TCP/SCTP | Да | ||
SOCK_DGRAM | UDP | UDP | Да | ||
SOCK_SEQPACKET | SCTP | SCTP | Да | ||
SOCK RAW | IPv4 | IPv6 | Да | Да |