Является ли это разумным/безопасным для close()
сокета непосредственно после последнего send()
?
Я знаю, что TCP должен попытаться доставить все оставшиеся данные в буфер отправки даже после закрытия сокета, но могу ли я действительно рассчитывать на это?
Я уверен, что в моем буфере приема нет оставшихся данных, поэтому после моего закрытия не будет отправлено RST.
В моем случае закрытие фактически является самой последней операцией кода перед вызовом exit()
.
Будет ли стек TCP действительно продолжать попытки и передавать данные даже после того, как процесс отправки его завершен? Это так же надежно, как и ждать произвольного тайм-аута, прежде чем вызвать close()
, установив SO_LINGER?
То есть, применяются те же самые таймауты TCP, или они короче? С большим почтовым буфером и медленным подключением время фактического переноса всех буферизованных данных может быть существенным, в конце концов.
Меня вообще не интересует уведомление о последнем отправленном байте; Я просто хочу, чтобы они, в конечном итоге, смогли максимально быстро добраться до удаленного хоста.
Подтверждения прикладного уровня не являются опцией (протокол HTTP, и я пишу небольшой сервер).