Книга: UNIX: разработка сетевых приложений
Сокет типа «один-к-одному»
Сокет типа «один-к-одному»
Данный тип сокета был разработан специально для облегчения переноса существующих приложений с TCP на SCTP. Его модель практически идентична описанной в главе 4. Существуют, конечно, некоторые отличия, о которых следует помнить (в особенности, при переносе приложений):
1. Все параметры сокетов должны быть преобразованы к соответствующим эквивалентам SCTP. Чаще всего используются параметры TCP_NODELAY
и TCP_MAXSEG
, вместо которых следует задавать SCTP_NODELAY
и SCTP_MAXSEG
.
2. Протокол SCTP сохраняет границы сообщений, поэтому приложению не приходится кодировать их самостоятельно. Например, приложение, основанное на TCP, может отправлять записи, чередуя двухбайтовые поля длины с полями данных переменной длины (каждое поле записывается в буфер отправки отдельным вызовом write
). Если так поступить с SCTP, адресат получит два отдельных сообщения, то есть функция read
возвратится дважды: один раз с двухбайтовым сообщением (поле длины), а второй — с сообщением неопределенной длины.
3. Некоторые TCP-приложения используют половинное закрытие для извещения собеседника о конце считываемых данных. Для переноса таких приложений на SCTP потребуется переписать их таким образом, чтобы сигнал о конце данных передавался в обычном потоке.
4. Функция send
может использоваться обычным образом. Функции sendto
и sendmsg
трактуют информацию об адресе получателя как приоритетную перед основным адресом собеседника (см. раздел 2.8).
Типичное приложение, работающее в стиле «один-к-одному», будет вести себя так, как показано на временной диаграмме рис. 9.1. Запущенный сервер открывает сокет, привязывается к адресу, после чего ожидает подсоединения клиента в системном вызове accept
. Через некоторое время запускается клиент, который открывает свой сокет и инициирует установление ассоциации с сервером. Предполагается, что клиент отправляет серверу запрос, сервер обрабатывает этот запрос и отправляет свой ответ обратно клиенту. Взаимодействие продолжается до тех пор, пока клиент не начнет процедуру завершения ассоциации. После закрытия ассоциации сервер либо завершает работу, либо ожидает установления новой ассоциации. Из сравнения с временной диаграммой TCP (см. рис. 4.1) становится ясно, что обмен пакетами через сокет SCTP типа «один-к-одному» осуществляется приблизительно так же.
Рис. 9.1. Временная диаграмма для сокета SCTP типа «один-к-одному»
Сокет SCTP типа «один-к-одному» является IP-сокетом (семейство AF_INET
или AF_INET6
) со значением типа SOCK_STREAM
и значением протокола IPPROTO_SCTP
.
- Сокет типа «один-ко-многим»
- Параметр сокета SCTP_PRIMARY_ADDR
- Использование CAST() с типами дата
- Перегрузка методов с несколькими параметрами типа
- Создание столбцов и работа с типами содержимого
- Пропуск параметров типа
- Каждая папка в Проводнике выглядит по-разному. Как привести все к одному виду?
- Я работаю на компьютере не один. Как настроить Windows для нескольких пользователей?
- Бывает, что много файлов удаляется быстро, а один файл может удаляться несколько минут. В чем причина?
- ДЖОН ФОН НЕЙМАН: ОДИН ИЗ САМЫХ БЛЕСТЯЩИХ УМОВ XX ВЕКА
- Параметры сокета SO_REUSEADDR и SO_REUSEPORT
- Я установил еще один винчестер, однако Windows XP его не распознает. Что можно сделать?