'Подключение' может обратиться к возврату сокета успешно без вызова сервера, 'принимают'?

Сервер создал сокет и связал с портом и запустил поток, который находится в цикле для принятия соединения. Когда-то более поздний цикл, из которого выходят из-за исключения, приводящего к выходу потока, но сокету, все еще ограничен к порту. Теперь, если клиент делает 'подключение' к этому серверу, это успешно выполняется. Как это возможно? Если я понимаю правильно, 'подключение' возвращается только после того, как сервер действительно 'принимает' на сокете слушания. Я пропускаю что-то здесь?

15
задан Cœur 8 February 2018 в 15:37
поделиться

2 ответа

Если я правильно понял, «connect» возвращается только после того, как сервер «принимает» на прослушивающем сокете. Я что-то здесь упускаю?

Да. TCP устанавливает соединение - трехстороннее рукопожатие - под покровом и помещает его в очередь завершенных соединений, когда оно будет готово. Accept () возвращает следующее ожидающее соединение из начала этой очереди.

С точки зрения клиента он «подключен», но ни с кем не разговаривает, пока сервер не примет и не начнет обработку. Вроде как когда вы звоните в компанию и сразу попадаете в очередь на удержание. Вы «подключены», но никакие дела не начнутся, пока кто-то не поднимет трубку и не начнет говорить.

Ваш отдельный поток мог умереть, но процесс все еще жив, а файловый дескриптор все еще открыт, поэтому TCP не знает, что происходит на уровне приложения.

25
ответ дан 1 December 2019 в 02:19
поделиться

Подключенные сокеты помещаются в очередь, ожидая, пока принимающий процесс их примет (). Их количество ограничено, и по их достижении ОС начнет либо отклонять соединения, либо игнорировать их.

4
ответ дан 1 December 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: