Вопрос о состояниях TCP для процесса веб-сервера. Почему он всегда находится в состоянии ПРОСЛУШИВАНИЯ?

Сейчас я подробно изучаю TCP и не понимаю жизненного цикла TCP серверного процесса. Предположим, я запускаю веб-сервер на порту 80, когда я использую netstat для просмотра соединения, я вижу, что он прослушивает порт 80, как и должно быть. Когда новые клиенты подключаются к моему серверу, между клиентом и сервером создается новый сокет, и этот сокет проходит обычный жизненный цикл (как описано в TCP RFC или здесь http://www.sdsusa.com/connections/). это прекрасно понятно, учитывая возможности демультиплексирования TCP.

У меня вопрос: соответствует ли TCP-соединение, которое прослушивает порт 80, тому же жизненному циклу? Я пытался отслеживать его, но он застрял на ПРОСЛУШИВАНИИ.


person Shai    schedule 19.01.2011    source источник


Ответы (1)


Сокет прослушивания всегда остается в состоянии «прослушивания». Когда приходит новое соединение, прослушиваемый сокет клонируется, клон переводится в состояние «установлено» и возвращается из вызова accept() (или его эквивалента). Оригинал остается в состоянии прослушивания, чтобы приложение могло снова опрашивать его для новых подключений.

Строго говоря, прослушивающий сокет вообще не соответствует «TCP-соединению» — он представляет собой потенциальное TCP-соединение. Только сокеты, возвращенные из accept(), представляют собой реальные соединения.

person araqnid    schedule 19.01.2011
comment
Когда прослушиваемый сокет клонируется, он переводится в состояние SYN_RECEIVED. Только после того, как новый сокет перейдет в состояние ESTABLISHED, он будет возвращен из вызова accept(). - person caf; 20.01.2011