Проект мультисервисного сервера без установления логического соединения
В мультисервисных серверах могут использоваться транспортные протоколы с установлением и без установления логического соединения. На рис. 15.1 показана одна из возможных схем организации процессов мультисервисного сервера без установления логического соединения. В одном потоке выполнения происходит ожидание поступления дейтаграммы через один из нескольких сокетов, где каждый сокет соответствует отдельной службе.

Поскольку в реализациях для операционной системы Linux ограничено максимальное число сокетов, которые могут быть открыты одним процессом, то может оказаться неосуществимой попытка предоставления доступа ко всем службам в одном сервере. Однако если каждый процесс может открыть N сокетов, то применение мультисервисных серверов позволяет уменьшить число требуемых процессов в N раз.
Как показано на рис. 15.1, последовательный мультисервисный сервер без установления логического соединения обычно состоит из одного потока управления, а также кода, необходимого для поддержки предоставляемых им служб. Сервер открывает набор сокетов UDP и привязывает каждый из них к общепринятому порту каждой из предоставляемых служб. В нем используется небольшая таблица для определения соответствия сокетов службам. Для каждого дескриптора сокета в таблице регистрируется адрес процедуры обработки запросов к службе, доступ к которой предоставляется через этот сокет. В сервере используется системный вызов select для перехода в состояние ожидания поступления дейтаграммы через один из этих сокетов. Замечательный способ приобрести шкаф телекоммуникационный совсем недорого.
После поступления дейтаграммы сервер вызывает соответствующую процедуру для формирования ответа и его отправки. Поскольку в таблице соответствия зарегистрирована служба, доступ к которой предоставляется через каждый сокет, сервер может легко связать дескриптор сокета с процедурой, поддерживающей данную службу.