UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Выделенный сокет может быть передан потоку или дочернему процессу для обработки запросов клиента. Листинг 23.15 демонстрирует новую модифицированную версию сервера, который обрабатывает первое сообщение клиента, выделяет ассоциацию при помощи
sctp_peeloffstr_echosrisinfo_assoc_idЛистинг 23.15. Параллельный сервер SCTP
//sctp/sctpserv_fork.c23 for (;;) {24 len = sizeof(struct sockaddr_in);25 rd_sz = Sctp_recvmsg(sock_fd, readbuf, sizeof(readbuf),26 (SA*)&cliaddr, &len, &sri, &msg_flags);27 Sctp_sendmsg(sock_fd, readbuf, rd_sz,28 (SA*)&cliaddr, len,29 sri.sinfo_ppid,30 sri.sinfo_flags, sn.sinfo_stream, 0, 0);31 assoc = sctp_address_to_associd(sock_fd, (SA*)&cliaddr, len);32 if ((int)assoc == 0) {33 err_ret("Can't get association id");34 continue;35 }36 connfd = sctp_peeloff(sock_fd, assoc);37 if (connfd == -1) {38 err_ret("sctp_peeloff fails");39 continue;40 }41 if ((childpid = fork()) == 0) {42 Close(sock_fd);43 str_echo(connfd);44 exit(0);45 } else {46 Close(connfd);47 }48 }26-3031-3536-40sctp_peeloffstr_echo41-4723.11. Управление таймерами
Протокол SCTP имеет множество численных пользовательских параметров. Все они устанавливаются через параметры сокетов, рассмотренные в разделе 7.10. Далее мы займемся рассмотрением нескольких параметров, определяющих задержку перед объявлением об отказе ассоциации или адреса собеседника.
Время обнаружения отказа в SCTP определяется семью переменными (табл. 23.1).
Таблица 23.1. Поля таймеров SCTP
| Поле | Описание | По умолчанию | Единицы |
|---|---|---|---|
| srto_min | Минимальный тайм-аут повторной передачи | 1000 | Мс |
| srto_max | Максимальный тайм-аут повторной передачи | 60000 | Мс |
| srto_initial | Начальный тайм-аут повторной передачи | 3000 | Мс |
| sinit_max_init_timeo | Максимальный тайм-аут повторной передачи сегмента INIT | 3000 | Мс |
| sinit_max_attempts | Максимальное количество повторных передач сегмента INIT | 8 | попыток |
| spp_pathmaxrxt | Максимальное количество повторных передач по адресу | 5 | попыток |
| sasoc_asocmaxrxt | Максимальное количество повторных передач на ассоциацию | 10 | попыток |
Эти параметры можно воспринимать как регуляторы, укорачивающие и удлиняющие время обнаружения отказа. Рассмотрим два сценария.
1. Конечная точка SCTP пытается открыть ассоциацию с собеседником, отключившимся от сети.
2. Две многоинтерфейсные конечные точки SCTP обмениваются данными. Одна из них отключается от сети питания в момент передачи данных. Сообщения ICMP фильтруются защитными экранами и потому не достигают второй конечной точки.
В сценарии 1 система, пытающаяся открыть соединение, устанавливает таймер RTO равным
srto_initialsinit_max_attemptssinit_max_init_timeoВращением нескольких «ручек» мы можем удлинять и укорачивать это время. Начнем с двух параметров, позволяющих уменьшить общую задержку. Сократим количество повторных передач, изменив переменную
sinit_max_attemptssrto_max_init_timeo
