Таким образом, почти все версии Un*x запускают "суперсервер", который создает сокеты для ряда услуг и слушает их одновременно при использовании системного вызова select(2). Когда отдаленный хост запрашивает одну из услуг, суперсервер замечает это и порождает другой сервер, установленный для этого порта, а сам продолжает слушать соединения.
Обычно используется суперсервер inetd, Internet Daemon. Он запускается при начальной загрузке системы и берет список услуг, к которым он обращается из файла запуска /etc/inetd.conf . В дополнение к вызываемым серверам там есть ряд тривиальных услуг, которые являются внутренними сервисами inetd. Они включают chargen, который просто генерирует ряд знаков и daytime, который возвращает время.
Каждая запись в файле /etc/inetd.conf состоит из единственной строки, состоящей из следующих полей:
service type protocol wait user server cmdline
Значения полей:
service Задает имя сервиса. Service name должно быть переведено в номер порта с помощью файла /etc/services . Этот файл будет описан в соответствующем разделе.
type
Определяет тип сокета: stream (для протоколов, ориентированных на соединение) или dgram (для датаграмных протоколов). TCP-сервисы должны всегда использовать stream, в то время как UDP-услуги должны всегда использовать dgram.
protocol Задает транспортный протокол для этого сервиса. Это поле должно быть подходящим названием протокола, найденным в файле protocols.
wait Эта опция применяется только на dgram. Это может быть wait или nowait. Если определен wait, то inetd
выполняет одновременно только один сервер для порта. Иначе после запуска сервера он немедленно продолжит слушать порт. Это полезно для серверов, которые читают все входящие датаграммы и завершают работу. Большинство RPC-серверов имеет этот тип и должны определять wait . Противоположный тип, "многопоточные" серверы, могут быть запущены в нескольких копиях, но это редко используется. Эти серверы должны определять nowait. Сокеты stream должны всегда использовать nowait.