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