Чтение онлайн

на главную

Жанры

UNIX: разработка сетевых приложений
Шрифт:

75 (uint32_t)ssf->ssf_assoc_id, ssf->ssf_error);

76 break;

77 case SCTP_ADAPTION_INDICATION:

78 ae = &snp->sn_adaption_event;

79 printf("SCTP_ADAPTION_INDICATION: 0x%x\n",

80 (u_int)ae->sai_adaption_ind);

81 break;

82 case SCTP_PARTIAL_DELIVERY_EVENT:

83 pdapi = &snp->sn_pdapi_event;

84 if (pdapi->pdapi_indication == SCTP_PARTIAL_DELIVERY_ABORTED)

85 printf("SCTP_PARTIAL_DELIEVERY_ABORTED\n");

86 else

87 printf("Unknown SCTP_PARTIAL_DELIVERY_EVENT 0x%x\n",

88 pdapi->pdapi_indication);

89 break;

90 case SCTP_SHUTDOWN_EVENT:

91 sse = &snp->sn_shutdown_event;

92 printf("SCTP_SHUTDOWN_EVENT: assoc=0x%x\n",

93 (uint32_t)sse->sse_assoc_id);

94 break;

95 default:

96 printf("Unknown notification event type=0x%x\n",

97 snp->sn_header.sn_type);

98 }

99 }

Преобразование
буфера и начало ветвления

14-15
Функция преобразует буфер вызова к типу union, после чего разыменовывает структуру
sn_header
и тип
sn_type
и выполняет ветвление по значению соответствующего поля.

Обработка изменения состояния ассоциации

16-40
Если функция обнаруживает в буфере уведомление об изменении ассоциации, она выводит тип происшедшего изменения.

Изменение адреса собеседника

16-40
Если получено уведомление об изменении адреса собеседника, функция распечатывает событие и новый адрес.

Ошибка на удаленном узле

67-71
Если получено уведомление об ошибке на удаленном узле, функция отображает сообщение об этом вместе с идентификатором ассоциации, для которой получено уведомление. Мы не пытаемся декодировать и отобразить сообщение об ошибке, присланное собеседником. При необходимости эти сведения можно получить из поля
sre_data
структуры
sctp_remote_error
.

Ошибка отправки сообщения

72-76
Если получено уведомление об ошибке отправки сообщения,
мы можем сделать вывод, что сообщение не было отправлено собеседнику. Это означает, что либо ассоциация завершает работу и вскоре будет получено уведомление об изменении ее состояния (если оно еще не было получено) или же сервер использует расширение частичной надежности и отправка сообщения оказалась неудачной из-за наложенных ограничений. Данные, которые все-таки были переданы, помещаются в поле
ssf_data
, которая наша функция не использует.

Индикация уровня адаптера

77-81
Если получено уведомление об уровне адаптера, функция отображает соответствующее 32-разрядное значение, полученное в сообщении INIT или INIT-ACK.

Уведомление механизма частичной доставки

82-89
Если получено уведомление механизма частичной доставки, функция выводит на экран соответствующее сообщение. Единственное определенное на момент написания этой книги событие, связанное с частичной доставкой, состоит в ее аварийном завершении.

Уведомление о завершении ассоциации

90-94
Если получено уведомление о завершении ассоциации, мы можем сделать вывод, что собеседник выполняет корректное закрытие. За этим уведомлением обычно следует уведомление об изменении состояния ассоциации, которое приходит б момент окончания последовательности пакетов, завершающих ассоциацию. Код сервера, использующего нашу новую функцию, приведен в листинге 23.5.

Листинг 23.5. Сервер, обрабатывающий уведомления о событиях

//sctp/sctpserv06.c

21 bzero(&evnts, sizeof(evnts));

22 evnts.sctp_data_io_event = 1;

23 evnts.sctp_association_event = 1;

24 evnts.sctp_address_event = 1;

25 evnts.sctp_send_failure_event = 1;

26 evnts.sctp_peer_error_event = 1;

27 evnts.sctp_shutdown_event = 1;

28 evnts.sctp_partial_delivery_event = 1;

29 evnts.sctp_adaption_layer_event = 1;

30 Setsockopt(sock_fd, IPPROTO_SCTP, SCTP_EVENTS, &evnts, sizeof(evnts));

31 Listen(sock_fd, LISTENQ);

32 for (;;) {

33 len = sizeof(struct sockaddr_in);

34 rd_sz = Sctp_recvmsg(sock_fd, readbuf, sizeof(readbuf),

35 (SA*)&cliaddr, &len, &sri, &msg_flags);

Поделиться:
Популярные книги

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Главная роль 2

Смолин Павел
2. Главная роль
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Главная роль 2

Охота на разведенку

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
6.76
рейтинг книги
Охота на разведенку

Идеальный мир для Лекаря 20

Сапфир Олег
20. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 20

Релокант. Вестник

Ascold Flow
2. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. Вестник

Новый Рал 3

Северный Лис
3. Рал!
Фантастика:
попаданцы
5.88
рейтинг книги
Новый Рал 3

Последний Паладин. Том 5

Саваровский Роман
5. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 5

Последний попаданец 3

Зубов Константин
3. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 3

Имя нам Легион. Том 1

Дорничев Дмитрий
1. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 1

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Не верь мне

Рам Янка
7. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Не верь мне

Курсант: назад в СССР 9

Дамиров Рафаэль
9. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: назад в СССР 9

Страж Кодекса. Книга IV

Романов Илья Николаевич
4. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга IV