... без дополнительных подтверждений на уровне протокола приложения?
Интуитивно кажется, что нет, но хотелось бы формальных пруфов.
Есть некая железка, которая качает обновления фирмвари. И есть сервер, с апачем и похапе, который эту фирмварь из базы читает и отдаёт. Заказчики хотят отметить в базе железку обновлённой по факту успешного скачивания, я предлагаю добавить дополнительный запрос от железки с подтверждением успешной установки.
Факты таковы:
1) PHP скрипт по дефолту прибивается, если клиент отрубился в процессе и сервер это обнаружил
2) Но это поведение можно поменять
3) Сервер не всегда может обнаружить факт преждевременного отрубания клиента. Допустим, соединение остаётся активным после обработки запроса
4) Апач чего-то там пишет в логах, включая количество отправленных байт. Можно ли принимать их во внимание?
Допустим, я упоролся и написал кастомный вебсервер на сишечке исключительно с целью гарантированного подтверждения успешного скачивания, и тщательно обрабатываю события с сокетом, после отправки фирмвари делаю shutdown() и close() и проверяю возвращаемые значения. Даёт ли корректное завершение соединения с клиентом (т.е. shutdown() и потом close() на дескрипторе сокета вернули 0) гарантию доставки? Т.е. что стороны успешно обменялись всеми FIN-ACK пакетами и доставили недоставленное при необходимости, со всеми нужными подтверждениями?