TCP/IP: что делать, если в процессе чтения сервером пакета от клиента пропадает интернет?
Во-первых, давайте отделим мух от котлет. Пакеты в TCP, у вас - буфер.
Во-вторых, TCP гарантирует доставку пакета (в заданном вами при отправке порядке). Пока пакет не будет передан целиком и полностью, стек TCP/IP будет его повторять. Алгоритм протокола такой. Однако, бывают обстоятельства сильнее TCP (пропадание коннекта из этой серии) и любая программа должна закладываться на то, что данные могут не дойти или дойти не полностью.
В-третьих, если у вас пришли не все данные в буфер, которые вы ждёте, то надо либо передавать контрольную сумму (что делать, если не [вся] пришла она?), либо, что правильнее, передавать не плоский буфер, а некую структуру данных, у которой вы можете проверить, что значения полей изменились (были заполнены при приёме данных) по сравнению с начальными. И исходя из этого решить, что структура пришла вся (последнее поле, например - контрольная сумма, по-умолчанию - 0) или её надо запрашивать заново.
А вы как хотели? Как в сказке? Как в сказке можно писать, если ваша программа 101% работает только и исключительно в локальной сети. В этом случае отрыв коннекта или сегмента - аварийная ситуация и не вам её исправлять.
Надо либо самому писать при отправке номер сообщения и размер. Раз это TCP, то клиент будет отправлять нечетные, получать четные номера, сервер получать нечетные, а отправлять четные. Если вдруг разрыв или еще что - ждем своего пакета. Если пошли пакет пропущен, просим прислать свой номер. Тоесть необходимо также реализовать своеобразные служебные запросы.
Обычно используют уже готовые NetworkManager'ы.