Операционная система UNIX
Шрифт:
Во всех случаях фактическое значение адреса возвращается в структуре
Для протоколов с предварительным установлением соединения программе-клиенту необходимо использовать функцию t_connect(3N), отправляющую запрос на создание соединения с удаленным транспортным узлом. Функция t_connect(3N) имеет вид:
Аргумент
struct netbuf addr | Адрес удаленного транспортного узла |
struct netbuf opt | Требуемые опции протокола |
struct netbuf udata | Прикладные данные, отправляемые вместе с управляющей информацией (запрос на установление соединения или подтверждение) |
int sequence | В данном случае не имеет смысла |
Через аргумент
Обычно возврат из функции t_connect(3N) происходит после окончательного установления соединения, когда виртуальный канал готов к передаче данных (конечно, в случае успешного завершения).
Для протоколов с предварительным установлением соединения программа-сервер вызывает функцию t_listen(3N), блокируя свое выполнение до получения запроса на создание виртуального канала.
Информация, возвращаемая транспортным протоколом в аргументе
Хотя t_listen(3N), несмотря на название, напоминает функцию accept(2), используемую для сокетов, сервер должен выполнить вызов другой функции — t_accept(3N) для того, чтобы фактически принять запрос и установить соединение. Функция t_accept(3N) имеет вид:
Аргумент
Как и в случае t_listen(3N),
После возврата из функции t_accept(3N) между двумя узлами (
Для обмена прикладными данными после установления соединения используются две функции: t_rcv(3N) для получения и t_snd(3N) для передачи. Они имеют следующий вид:
Первые три аргумента соответствуют аналогичным аргументам системных вызовов read(2) и write(2). Аргумент
T_EXPEDITED | Указывает на отправление экстренных данных |
T_MORE | Указывает, что данные составляют логическую запись, продолжение которой будет передано последующими вызовами t_snd(3N). Напомним, что TCP обеспечивает неструктурированный поток и, следовательно, не поддерживает данной возможности |
Эту информацию принимающий узел получает с помощью t_rcv(3N) также через аргумент
Для протоколов без предварительного установления соединения используются функции t_rcvdata(3N) и t_snddata(3N) для получения и передачи датаграмм соответственно. Функции имеют следующий вид:
Для передачи данных используется структура
struct netbuf addr | Адрес удаленного транспортного узла |
struct netbuf opt | Опции протокола |
struct netbuf udata | Прикладные данные |
Созданный транспортный узел может быть закрыт с помощью функции t_close(3N). Заметим, что при этом соединение, или виртуальный канал, с которым ассоциирован данный узел, в ряде случаев не будет закрыт. Функция t_close(3N) имеет вид:
где