Книга: UNIX: разработка сетевых приложений
Счетчик ссылок дескриптора
Счетчик ссылок дескриптора
В конце раздела 4.8 мы отметили, что когда родительский процесс на нашем параллельном сервере закрывает присоединенный сокет с помощью функции close
, счетчик ссылок дескриптора уменьшается лишь на единицу. Поскольку счетчик ссылок при этом все еще оставался больше нуля, вызов функции close
не инициировал последовательность завершения TCP-соединения, состоящую из четырех пакетов. Нам нужно, чтобы наш параллельный сервер с присоединенным сокетом, разделяемым между родительским и дочерним процессами, работал именно по этому принципу.
Если мы хотим отправить сегмент FIN по соединению TCP, вместо функции close
должна использоваться функция shutdown
(см. раздел 6.6). Причины мы рассмотрим в разделе 6.5.
Необходимо также знать, что происходит с нашим параллельным сервером, если родительский процесс не вызывает функцию close
для каждого присоединенного сокета, возвращаемого функцией accept
. Прежде всего, родительский процесс в какой-то момент израсходует все дескрипторы, поскольку обычно число дескрипторов, которые могут быть открыты процессом, ограничено. Но что более важно, ни одно из клиентских соединений не будет завершено. Когда дочерний процесс закрывает присоединенный сокет, его счетчик ссылок уменьшается с 2 до 1 и остается равным 1, поскольку родительский процесс не закрывает присоединенный сокет с помощью функции close
. Это помешает выполнить последовательность завершения соединения TCP, и соединение останется открытым.
- Покупка ссылок
- Нормально ли воспринимается поисковыми системами маскировка партнерских ссылок?
- Установка значений спин-счетчиков
- Инварианты класса и семантика ссылок
- 9.4. Управление дескрипторами файлов
- Типы ссылок. Имена ячеек
- Регистр управления 16-разрядным вычитающим счетчиком
- Автоматизированные биржи ссылок
- Вставка гиперссылок и графических изображений
- Глава 50 Инструментарий и язык электронных рассылок
- О закупке ссылок
- Добавление счетчиков