Я много лет занимался программированием сокетов, но я никогда не получал пропущенных сообщений с использованием TCP - до сих пор. У меня есть сервер Java и клиент в C - оба на локальном хосте. Они отправляют короткие сообщения в виде строк, с некоторыми задержками между ними. У меня есть один конкретный случай, когда сообщение никогда не приходит на стороне клиента. Это воспроизводимо, но странно зависит от машины.
Чтобы дать более подробную информацию, я могу отладить серверную часть и увидеть отправку, за которой следует сброс. Я могу подключиться к клиенту и пройти через вызовы select (в цикле), но он просто никогда не появляется. Кто-нибудь сталкивался с этим, и есть ли объяснение, кроме ошибки кодирования?
Другими словами, если у вас есть подключенный сокет и вы делаете запись с одной стороны и чтение с другой, что может произойти в середине, чтобы вызвать что-то подобное?
Еще одна деталь - я использовал tcpdump в интерфейсе обратной связи и могу видеть пропущенное сообщение.