Книга: UNIX: разработка сетевых приложений
10.6. Управление количеством потоков
Разделы на этой странице:
10.6. Управление количеством потоков
Мы рассмотрели пример использования потоков SCTP, но пока что мы не знаем, каким образом можно контролировать количество потоков, запрашиваемых конечной точкой в процессе инициализации ассоциации. В предыдущих примерах мы работали с тем количеством исходящих потоков, которое было установлено в системе по умолчанию. В реализации SCTP для FreeBSD, созданной в рамках проекта KAME, это значение равно 10. А что, если серверу и клиенту нужно больше десяти потоков? В листинге 10.6 мы приводим модификацию кода сервера, позволяющую увеличивать количество потоков, запрашиваемое при создании ассоциации. Обратите внимание, что данный параметр сокета должен быть изменен до создания ассоциации.
Листинг 10.6. Вариант сервера, допускающий увеличение числа потоков
//sctp/sctpserv02.c
14 if (argc 2)
15 stream_increment = atoi(argv[1]);
16 sock_fd = Socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
17 bzero(&initm, sizeof(initm));
18 initm.sinit_num_ostreams = SERV_MORE_STRMS_SCTP;
19 Setsockopt(sock_fd, IPPROTO_SCTP, SCTP_INITMSG, &initm, sizeof(initm));
Предварительная настройка
14-16
Как и в предыдущей версии программы, сервер устанавливает флаг stream_increment
в соответствии с дополнительным параметром командной строки, после чего открывает сокет.
Изменение запрашиваемого количества потоков
17-19
Все сделанные модификации относятся именно к этим строкам. Сначала сервер обнуляет структуру sctp_initmsg
. Это изменение гарантирует, что вызов setsockopt
не приведет к непреднамеренному изменению каких-либо иных значений кроме того, которое нас интересует. Затем сервер устанавливает поле sinit_max_ostreams
равным количеству запрашиваемых потоков. После этого вызывается функция setsockopt
с параметром сокета SCTP_INITMSG
для установки параметров сообщения INIT.
Альтернативой установке параметра сокета может быть вызов функции sendmsg
со вспомогательными данными, запрашивающими требуемое количество потоков. Передача вспомогательных данных приведет к желаемому результату только для сокетов типа «один-ко-многим».
- 10.1. Введение
- 10.2. Потоковый эхо-сервер SCTP типа «один-ко-многим»: функция main
- 10.3. Потоковый эхо-клиент SCTP типа «один-ко-многим»: функция main
- 10.4. Потоковый эхо-клиент SCTP: функция str_cli
- 10.5. Блокирование очереди
- 10.6. Управление количеством потоков
- 10.7. Управление завершением соединения
- 10.8. Резюме
- Упражнения
- Достоинства и недостатки потоков
- УПРАВЛЕНИЕ РЕПУТАЦИЕЙ В ИНТЕРНЕТЕ
- Глава 7 Управление хранилищем данных
- Глава 11 Корпоративное управление и стратегия
- 5.7 Устройства NAS под управлением Windows и моментальные снимки
- 7.8 Управление иерархическим хранилищем
- Управление файлами занятий
- Управление пользователями и разрешениями узла
- Управление функциями узла
- Управление объединением содержимого узлов
- Использование панели задач Управление документами в приложениях Office 2007
- Управление rpm-пакетами: нынче не то, что давеча