Теория и практика программирования на Си в Unix

Принципы применения


При создании сокета, указывается в какой области происходит работа: UNIX (AF_UNIX), TCP/IP (AF_INET), X25, DECNET, APPLETALK... Каждой области соответствует свой тип протокола. Кроме того, задается тип, определяющий свойства коммуникации:
- SOCK_DGRAM: сообщения посылаются в форме дейтаграмм. Связанный с ним протокол связи нe является таким надежным (нарушается последовательность, возможны потери данных) в реэиме без установления логического соединения, как UDP в области AF_INET;
- SOCK_STREAM: посылаются потоки байтов, понятие "сообщения" не вводится. Используемый протокол связи надежен, с установлением виртуального соединения, как TCP в области AF_INET;
- SOCK_ RAW: обеспечивает доступ к протоколам самого низкого уровня, таким как IP в области AF_INET, либо реализует новые протоколы.

Если используются сокеты над UDP размер передаваемых данных ограничен несколькими килобайтами, от 2 Кб до 8 Кб, в зависи-мости от системы. Сокет-интерфейс можно использовать для связи между двумя процессами на одной машине. В этом случае необходимо указать, что работа производится в области AF_UNIX. Вызовы сокетов для области AF_UNIX те же, что и для области AF_INET; меняются только структуры, связанные с адресами. Данное сходство вызо-вов позволяет достаточно легко переходить от локальных задач к сетевым и обратно.

Использование в режиме с установлением виртуального соединения

Клиент :
- создает сокет;
- подсоединяется к серверу, предоставляя адрес удаленного сокета (адрес Internet сервера и номер сервисного порта). Это соединение автоматически присваивает клиенту номер порта;
- осуществляет считывание или запись на сокет;
- закрывает сокет.
Сервер:
- создает сокет;
- связывает сокет-адрес (адрес Internet и номер порта) с сервисной программой: "binding";
- переводит себя в состояние "прослушивания" входящих соединений;
- для каждого входящего соединения:
- принимает соединение (создается новый сокет с теми же характеристиками, что и исходный;
- считывает и записывает на новый сокет;
- закрывает новый сокет.
На рис. 4.4. показаны примитивы, используемые для сокетов типа SOCK_STREAM.

Рис. 4.4. Использование сокетов с установлением логического соединения.

Некоторые вызовы способные заблокировать программу : Клиент:
- connect () до того, как сервер осуществит accept ();
- write () при переполнении буфера передачи;
- read () до того, как будет получен хотя бы один символ вследствие операции записи, осуществленной сервером.
Сервер:
- accept () до того, как клиент осуществит connect ();
- read () до того, как будет получен хотя бы один символ, вследствие операции записи, осуществленной клиентом;
- write () при переполнении буфера передачи.


Библиотека TLI требует особого редактирования связей с помощью программы (-lnsl). Различные структуры и постоянные описаны во включаемом файле /usr/include/tiuser.h. Применение библиотеки различается, в зависимости от того, в каком режиме используется транспортная служба (с установлением соединения и без такового).



Содержание раздела