Я пишу простой HTTP-сервер и узнаю о TIME_WAIT. Как реальные веб-серверы в тяжелых средах обрабатывают запросы от тысяч пользователей без того, что все сокеты застревают в TIME_WAIT после обработки запроса? (Не спрашивайте о keep-alive - это поможет одному клиенту, но не для тысяч разных клиентов).Как веб-серверу избежать TIME_WAIT?
Я прочитал, что вы пытаетесь закрыть клиент первым, чтобы все TIME_WAIT распространялись среди всех клиентов, а не концентрировались на сервере.
Как это делается? В какой-то момент сервер должен вызвать close/closesocket.
Так сервер просто держится и ждет, когда клиент закроется? Я бы подумал, что в какой-то момент ему захочется тайм-аут и закрыть соединение. – DougN
Что заставляет меня думать о другом вопросе :) Предположите ли вы, что настоящий веб-сервер (IIS/Apache?) Просто вызывает выбор в сокете с 5 (?) Вторым таймаутом - считая, что для клиента должно быть достаточно времени отключить (и позволить выбрать return с гнездом ошибки)? – DougN
Если вы сбросите соединение, а не закрываете его, вы также не попадете в TIME_WAIT. Поэтому, если вы хотите добавить тайм-аут для незанятых подключений, вы должны закрыть их, сначала отключив задерживание, а затем выступив с закрытием. Это отправит RST, и вы не попадете в TIME_WAIT. –