Я хотел бы добавить подтверждение доставки в мой интерфейс TCP.Неблокирующая запись может заполнить буфер отправки, но данные могут никогда не прийти, если соединение не установится - тем временем запись сообщила, что данные были получены (локальным сокетом).
Если я добавил дополнительные подтверждения встек, я мог убедиться, что каждый кусок данных был получен.Я думаю, что FTP делает это.Но я не могу заимствовать чей-либо код и предпочел бы не реализовывать ack / resend, особенно потому, что TCP уже делает большую часть этого.
Я думаю, что это можно сделать, если я смогу проверить, что буфер отправки сокета пусткаждая запись ().Если данных больше нет, все должно быть доставлено.Я не возражаю против задержки очистки буфера.
Редактировать: я понимаю, реализации TCP / сокетов различаются в зависимости от системы, но если есть решение Беркли или Linux, оно, вероятно, доступно для меня.
Редактировать: Чтобы ответить на некоторые предложения, я хотел бы реализовать три уровня интерфейса TCP, где я не знаю, как выполнить * 'd.
- Обычный TCP без гарантии доставкидля приложений, которым нравится опасно жить.
- * TCP, который проверяет получение удаленным хостом, даже если пакет никогда не доставлялся удаленному приложению.Это снижает большую часть моего риска соединения (мобильный клиент) и может быть полностью реализовано на стороне клиента.Я думаю, что это может быть реализовано, если я смогу проверить, что исходящий буфер сокета пуст.
- ACK прикладного уровня и повторная отправка реализованы поверх TCP или UDP, поэтому конечные точки проверены.