я тестирую вещи с сокетами, и я столкнулся с этим странным случаем:
я написал очень простой tcp сервер в c, я сделал его блокированным после accept (), просто чтобы посмотреть, что происходит при одновременном принятии нескольких попыток соединения:
как получается, что процесс или соединение может иметь индекс 0? Может кто-нибудь объяснить мне, что происходит?
Какое отставание для принятия? Я подозреваю, что это 2.
Eugen Rieck 6 лет назад
0
Если я правильно понимаю, и отставание - это размер очереди ожидающих входящих соединений, то, как показывает код, это 5. Кстати, я также понял, что сервер может установить соединение с еще 2 клиентами, чем указано в Отставание, я, вероятно, отправлю еще один вопрос относительно этого
joseph M'Bimbi-Bene 6 лет назад
0
1 ответ на вопрос
0
Eugen Rieck
В Linux используется подход с двумя очередями к журналу ожидания прослушивания. Это означает, что в дополнение к завершенным соединениям (5, как в вашем коде) может существовать очередь неполных соединений, где 3-х стороннее рукопожатие еще не завершено.
Соединения в этом состоянии еще не назначены процессу, поэтому они принадлежат ядру, в результате чего идентификатор процесса равен 0. Этот бит меня в приложении Mono / .NET, где я искал ошибку в Mono, которая была на самом деле поведение по конструкции ядра.
Смотрите здесь для деталей подхода с двумя очередями.