UNIX: разработка сетевых приложений, стр. 266
Выделенный сокет может быть передан потоку или дочернему процессу для обработки запросов клиента. Листинг 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