My-library.info
Все категории

Операционная система UNIX - Робачевский Андрей Михайлович

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Операционная система UNIX - Робачевский Андрей Михайлович. Жанр: Интернет год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
Операционная система UNIX
Дата добавления:
17 сентябрь 2020
Количество просмотров:
282
Читать онлайн
Операционная система UNIX - Робачевский Андрей Михайлович

Операционная система UNIX - Робачевский Андрей Михайлович краткое содержание

Операционная система UNIX - Робачевский Андрей Михайлович - описание и краткое содержание, автор Робачевский Андрей Михайлович, читайте бесплатно онлайн на сайте электронной библиотеки My-Library.Info

Операционная система UNIX читать онлайн бесплатно

Операционная система UNIX - читать книгу онлайн бесплатно, автор Робачевский Андрей Михайлович

  perror("Ошибка вызова gethostbyname()");

  exit(1);

 }

 /* Создадим транспортный узел. В качестве поставщика

    транспортных услуг выберем модуль TCP */

 printf("Сервер готовn");

 if ((tn = t_open("/dev/tcp", O_RDWR, NULL)) == -1) {

  t_error("Ошибка вызова t_open()");

  exit(1);

 }

 /* Предоставим системе самостоятельно связать узел с

    подходящим адресом */

 if (t_bind(tn, (struct t_bind*)0,

  (struct t_bind *)0) < 0} {

  t_error("Ошибка вызова t_bind()");

  exit(1);

 }

 fprintf(stderr, "Адрес клиента: %sn",

  inet_ntoa(serv_addr.sin_addr));

 /* Укажем адрес сервера, с которым мы будем работать */

 bzero(&serv_addr, sizeof(serv_addr));

 bcopy(hp->h_addr, &serv_addr.sin_addr, hp->h_length);

 serv_addr.sin_family = hp->h_addrtype;

 /* Приведем в соответствие порядок следования байтов

    для хоста и сети */

 serv_addr.sin_port = htons(PORTNUM);

 /* Поскольку в структуре t_call нам понадобится только буфер

    для хранения адреса сервера, разместим ее динамически */

 if ((call =

  (struct t_call*)t_alloc(tn, T_CALL, T_ADDR)) == NULL) {

  t_error("Ошибка вызова t_alloc()");

  exit(2);

 }

 call->addr.maxlen = sizeof(serv_addr);

 call->addr.len = sizeof(serv_addr);

 call->addr.buf = (char*)&serv_addr;

 call->opt.len = 0;

 call->udata.len = 0;

 /* Установи соединение с сервером */

 if (t_connect(tn, call, (struct t_call*)0) == -1) {

  t_error("Ошибка вызова t_rcv()");

  exit(1);

 }

 /* Передадим сообщение и получим ответ */

 t_snd(tn, buf, sizeof(buf), 0);

 if (t_rcv(tn, buf, sizeof(buf), &flags) < 0) {

  t_error("Ошибка вызова t_rcv()");

  exit(1);

 }

 /* Выведем полученное сообщение на экран */

 printf("Получено от сервера: %sn", buf);

 printf("Клиент завершил работу!nn");

}

В рассмотренном примере большая часть исходного текста посвящена созданию транспортных узлов и установлению соединения, в то время как завершение сеанса связи представлено скупыми вызовами t_close(3N). На самом деле, вызов t_close(3N) приводит к немедленному разрыву соединения, запрещая дальнейшую передачу или прием данных. Однако виртуальный канал, обслуживаемый протоколом TCP, является полнодуплексным и, как было показано, TCP предусматривает односторонний разрыв связи, позволяя другой стороне продолжать передачу данных. Действиям, предписываемым TCP, больше соответствуют две функции t_sndrel(3N) и t_rcvrel(3N), которые обеспечивают "корректное "прекращение связи (orderly release). Разумеется, эти рассуждения справедливы лишь для транспортного протокола, обеспечивающего передачу данных с предварительным установлением связи, каковым, в частности, является протокол TCP.

Функции t_sndrel(3N) и t_rcvrel(3N) имеют вид:

#include <tiuser.h>

int t_sndrel(int fd);

int t_rcvrel(int fd);

Вызывая функцию t_sndrel(3N), процесс отправляет другой стороне уведомление об одностороннем прекращении связи, это означает, что процесс не намерен больше передавать данные. В то же время процесс может принимать данные — файловый дескриптор

fd
доступен для чтения.

Другая сторона подтверждает получение уведомления вызовом функции t_rcvrel(3N). Однако поскольку получение такого уведомления носит асинхронный характер, процесс должен каким-то образом узнать, что запрос поступил. Такой индикацией является завершение с ошибкой попытки получения данных от удаленного узла, например, с помощью функции t_rcv(3N). В этом случае вызов функции t_rcv(3N) завершится с ошибкой

TLOOK
.

Эта ошибка свидетельствует, что произошло событие, связанное с коммуникационным узлом, анализ которого позволяет получить дополнительную информацию о причине неудачи. Текущее событие может быть получено с помощью функции t_look(3N):

#include <tiuser.h>

int t_look(int fildes);

Функция возвращает идентификатор, соответствующий одному из событий, перечисленных в табл. 6.6.

Таблица 6.6. События, связанные с коммуникационным узлом

Событие Значение
T_CONNECT
Узлом получено подтверждение создания соединения
T_DISCONNECT
Узлом получен запрос на разрыв соединения
T_DATA
Узлом получены данные
T_EXDATA
Узлом получены экстренные данные
T_LISTEN
Узлом получен запрос на установление соединения
T_ORDREL
Узлом получен запрос на корректное прекращение связи
T_ERROR
Свидетельствует о фатальной ошибке
T_UDERR
Свидетельствует об ошибке датаграммы

Робачевский Андрей Михайлович читать все книги автора по порядку

Робачевский Андрей Михайлович - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки My-Library.Info.


Операционная система UNIX отзывы

Отзывы читателей о книге Операционная система UNIX, автор: Робачевский Андрей Михайлович. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.