Серверы, предоставляющие несколько служб

API-интерфейс сокетов обеспечивает еще одну интересную возможность построения сервера: один процесс может ожидать поступления соединения через несколько сокетов. Для этого предусмотрена функция select, которая входит в общий набор операций ввода-вывода и может также применяться к сокетам . Функция select имеет следующий синтаксис: Красивая кухня - это легко - Кухни Зов. Интерьер кухни. Дизайн.

число-дескрипторов = select(число-дескрипторов,  входная-маска, выходная-маска, маска-исключений, тайм-аут)

В двух словах можно сказать, что функция select переводит вызывающий ее процесс в состояние ожидания до тех пор, пока один из набора дескрипторов, заданных в виде параметров, не перейдет в состояние готовности. Параметр число-дескрипторов определяет количество дескрипторов, которые нужно проверить (это число находится в пределах от 2 до число-дескрипторов минус 1). Параметр входная-маска — это указатель на битовую маску, определяющую дескрипторы, которые необходимо проверить на предмет готовности ко вводу данных. Параметр выходная-маска является указателем на битовую маску, определяющую дескрипторы, которые необходимо проверить на предмет готовности к выводу данных. Параметр маска-исключений— указатель на битовую маску, определяющую дескрипторы, которые необходимо проверить на предмет возникновения исключительных ситуаций. И наконец, если значение параметра тайм-аут не равняется нулю, то оно определяет адрес переменной целого типа, в которой хранится значение тайм-аута, по прошествии которого управление возвращается в вызывающую программу. Нулевое значение параметра тайм-аут переводит вызывающую программу в состояние ожидания, пока один из дескрипторов не перейдет в состояние готовности. Поскольку параметр тайм-аут содержит адрес переменной целого типа, в которой хранится значение тайм-аута, а не сам тайм-аут, процесс может запросить нулевую задержку, передав функции select адрес целого числа, содержащего ноль. Нулевое значение тайм-аута позволяет вызывающей программе опросить указанные дескрипторы на предмет их готовности к выполнению операций ввода-вывода.

Функция select возвращает вызывающей программе количество дескрипторов из указанного набора, готовых к выполнению операций ввода-вывода. Она также изменяет битовые маски, определенные параметрами входная-маска, выходная-маска и маска-исключений, чтобы сообщить прикладной программе, какие из выбранных дескрипторов находятся в состоянии готовности. Таким образом, прежде чем вызвать функцию select, прикладная программа должна установить те биты, которые соответствуют предназначенным для проверки дескрипторам. После вызова функции те из битов, которые по-прежнему установлены в единицу, соответствуют готовому к работе дескриптору.

Чтобы осуществить взаимодействие через несколько сокетов одновременно, процесс должен сначала создать все необходимые ему сокеты, а затем с помощью функции select определить, какой из сокетов первым перейдет в состояние готовности к выполнению операций ввода-вывода. Обнаружив готовый к работе сокет, для выполнения через него операций ввода-вывода процесс использует описанные выше функции.

Получение и назначение имен узлов сети

В большинстве операционных систем используется понятие внутреннего имени узла сети. Для подключенных к объединенной сети машин внутреннее имя узла обычно представляет собой доменное имя основного сетевого интерфейса машины. Функция gethostname дает возможность пользовательским процессам определить имя узла сети, а функция sethostname позволяет привилегированным процессам назначить имя узлу сети. Функция gethost-name имеет следующий синтаксис:

gethostname(адрес-буфера, длина)

Параметр адрес-буфера задает адрес массива байтов, в который система помещает имя узла, а параметр длина представляет собой целое число, определяющее длину этого массива. Чтобы назначить имя узлу сети, привилегированный процесс вызывает функцию sethostname, синтаксис которой имеет следующий вид:

sethostname(адрес-имени, длина)

Параметр адрес-имени задает адрес массива, в котором хранится имя, а параметр длина представляет собой целое число, определяющее длину этого массива.

Похожие статьи Меню Опрос Фото Популярное