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