Вопрос о состояниях TCP для процесса веб-сервера. Почему он всегда находится в состоянии LISTENING? - PullRequest
0 голосов
/ 19 января 2011

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

Мой вопрос: является ли TCP-соединение, которое прослушивает порт 80, таким же жизненным циклом? Я пытался контролировать его, но он застрял на СЛУШАТЬ.

1 Ответ

1 голос
/ 19 января 2011

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

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

...