Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
user = root server = /usr/sbin/vsftpd}Сервис
daytimegetdateSOCK_STREAMSOCK_DGRAMСервис передачи файлов
ftpSOCK_STREAMftpДля активизации конфигурационных изменений сервиса можно отредактировать конфигурацию xinetd и отправить сигнал отбоя (hang-up) процессу-демону, но мы рекомендуем использовать более дружелюбный способ настройки сервисов. Для того чтобы разрешить вашему клиенту подключаться к сервису
daytimedaytime
Рис. 15.1
Для систем, применяющих программу inetd вместо xinetd, далее приведено эквивалентное извлечение из файла конфигурации inetd, /etc/inetd.conf, которое программа inetd использует для принятия решения о запуске серверов:
## <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>## Echo, discard, daytime и chargen используются в основном для# тестирования.#daytime stream tcp nowait root internaldaytime dgram udp wait root internal## Это стандартные сервисы.#ftp stream tcp-nowait root /usr/sbin/tcpd /usr/sbin/wu.ftpdtelnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd## Конец файла inetd.conf.Обратите внимание на то, что в нашем примере сервис ftp предоставляется внешней программой wu.ftpd. Если в вашей системе выполняется демон inetd, вы можете изменить набор предоставляемых сервисов, отредактировав файл /etc/inetd.conf (знак # в начале строки указывает на то, что это строка комментария) и перезапустив процесс inetd. Сделать это можно, отправив сигнал отбоя (hang-up) с помощью команды
killkillall# <b>killall -HUP inetd</b>Параметры сокета
Существует много параметров, которые можно применять для управления поведением соединений на базе сокетов — слишком много для подробного описания в этой главе. Для манипулирования параметрами используют функцию
setsockopt<b>#include <sys/socket.h></b><b>int setsockopt(int socket, int level, int option_name,</b><b> const void *option value, size_t option len);</b>Задавать параметры можно на разных уровнях иерархии протоколов. Для установки параметров на уровне сокета вы должны задать
levelSOL_SOCKETgetprotobynameВ аргументе
option_nameoption_valueoption_lenПараметры уровня сокета определены в заголовочном файле sys/socket.h и включают приведенные в табл. 15.4 значения.
Таблица 15.5
| Параметр | Описание |
|---|---|
SO_DEBUG | Включает отладочную информацию |
SO_KEEPALIVE | Сохраняет активными соединения при периодических передачах |
SO_LINGER | Завершает передачу перед закрытием |
Параметры
SO_DEBUGSO_KEEPALIVEoption_valueSO_LINGERlingerФункция
setsockoptМножественные клиенты
До сих пор в этой главе вы видели, как применяются сокеты для реализации клиент-серверных систем, как локальных, так действующих, в сети. После установки соединения на базе сокетов они ведут себя как низкоуровневые открытые файловые дескрипторы и во многом как двунаправленные каналы.
Теперь необходимо рассмотреть случай множественных клиентов, одновременно подключающихся к серверу. Вы видели, что, когда серверная программа принимает от клиента запрос на соединение, создается новый сокет, а исходный сокет, ожидающий запросы на соединение, остается доступен для последующих запросов. Если сервер не сможет немедленно принять поступившие позже запросы на соединения, они сохранятся в очереди ожидания.
Тот факт, что исходный сокет все еще доступен, и что сокеты ведут себя как файловые дескрипторы, дает нам метод одновременного обслуживания многих клиентов. Если сервер вызовет функцию
fork