Извините, но, учитывая то, что вы пытаетесь достичь, вы должны понимать, что даже если стек TCP МОЖЕТ дать вам указание, что конкретный набор байтов был подтвержден ACK удаленным стеком TCP, он не сможет на самом деле не означает ничего, что вы знаете в данный момент.
Проблема в том, что если у вас нет ACK уровня приложения от удаленного приложения, которое отправляется только после того, как удаленное приложение обработало данные, которые вы отправили ему, то вы никогда не узнаете наверняка, были ли данные получены удаленное приложение.
'но я могу предположить, что это достаточно близко'
просто бред. С тем же успехом вы можете сделать такое предположение, если отправка завершена, поскольку она примерно так же действительна.
Проблема в том, что даже если стек TCP может сказать вам, что удаленный стек получил ACK для данных (1), это не то же самое, что удаленное приложение, получающее данные (2), и это не то же самое в качестве удаленного приложения на самом деле ИСПОЛЬЗУЯ данные (3).
Учитывая, что удаленное приложение МОЖЕТ аварийно завершить работу в любой момент, 1, 2 ИЛИ 3, единственным полезным признаком того, что данные поступили, является тот, который отправляется удаленным приложением после того, как оно использовало данные по назначению.
Все остальное - просто желаемое за действительное.