Набор функций, образующих API для сетевых сокетов с виртуальным каналом

Сокет (socket) - это конечная точка сетевых коммуникаций. Он является чем-то вроде "портала", через которое можно отправлять байты во внешний мир. Приложение просто пишет данные в сокет; их дальнейшая буферизация, отправка и транспортировка осуществляется используемым стеком протоколов и сетевой аппаратурой. Чтение данных из сокета происходит аналогичным образом.

В программе сокет идентифицируется дескриптором - это просто переменная типа int. Программа получает дескриптор от операционной системы при создании сокета, а затем передаёт его сервисам socket API для указания сокета, над которым необходимо выполнить то или иное действие.

При создании сокета, указывается в какой области происходит работ. Каждой области соответствует свой тип протокола. Кроме того, задается тип, определяющий свойства коммуникации:

- SOCK_DGRAM: сообщения посылаются в форме дейтаграмм(блок информации передаваемый протоколом без предварительного соединения). Связанный с ним протокол связи нe является таким надежным (нарушается последовательность, возможны потери данных) в реэиме без установления логического соединения, как UDP в области AF_INET;

- SOCK_STREAM: посылаются потоки байтов, понятие "сообщения" не вводится. Используемый протокол связи надежен, с установлением виртуального соединения, как TCP в области AF_INET;

- SOCK_ RAW: обеспечивает доступ к протоколам самого низкого уровня, таким как IP в области AF_INET, либо реализует новые протоколы.

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

Клиент:

- создает сокет;

- подсоединяется к серверу, предоставляя адрес удаленного сокета (адрес Internet сервера и номер сервисного порта). Это соединение автоматически присваивает клиенту номер порта;

- осуществляет считывание или запись на сокет;

- закрывает сокет.

Сервер:

- создает сокет;

- связывает сокет-адрес (адрес Internet и номер порта) с сервисной программой: "binding";

- переводит себя в состояние "прослушивания" входящих соединений;

- для каждого входящего соединения:

- принимает соединение (создается новый сокет с теми же характеристиками, что и исходный;

- считывает и записывает на новый сокет;

- закрывает новый сокет.

Некоторые вызовы способные заблокировать программу: Клиент:

- connect () до того, как сервер осуществит accept ();

- write () при переполнении буфера передачи;

- read () до того, как будет получен хотя бы один символ вследствие операции записи, осуществленной сервером.

Сервер:

- accept () до того, как клиент осуществит connect ();

- read () до того, как будет получен хотя бы один символ, вследствие операции записи, осуществленной клиентом;

- write () при переполнении буфера передачи.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: