Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 616 из 715

h›

main() {

 int sd, ns;

 char buf[256];

 struct sockaddr sockaddr;

 int fromlen;

 sd = socket(AF_UNIX, SOCK_STREAM, 0);

 /* имя в запросе на подключение не может включать пустой символ */

 if (connect(sd, "sockname", sizeof("sockname") - 1) == -1) exit();

 write(sd, "hi guy", 6);}

Рисунок 11.21. Процесс-клиент в домене "UNIX system"

На Рисунке 11.21 показан пример процесса-клиента, ведущего общение с сервером. Клиент создает гнездо в том же домене, что и сервер, и посылает запрос на подключение к гнезду с именем sockname. В результате подключения процесс-клиент получает виртуальный канал связи с сервером. В рассматриваемом примере клиент передает одно сообщение и завершается.

Если сервер обслуживает процессы в сети, указание о том, что гнездо принадлежит домену "Internet", можно сделать следующим образом:

socket(AF_INET, SOCK_STREAM, 0);

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



11.5 ВЫВОДЫ



Мы рассмотрели несколько форм взаимодействия процессов.

|< Пред. 614 615 616 617 618 След. >|

Java книги

Контакты: [email protected]