Сообщение о пропущенном сокете - PullRequest
4 голосов
/ 18 июня 2009

Я много лет занимался программированием сокетов, но я никогда не получал пропущенных сообщений с использованием TCP - до сих пор. У меня есть сервер Java и клиент в C - оба на локальном хосте. Они отправляют короткие сообщения в виде строк, с некоторыми задержками между ними. У меня есть один конкретный случай, когда сообщение никогда не приходит на стороне клиента. Это воспроизводимо, но странно зависит от машины.

Чтобы дать более подробную информацию, я могу отладить серверную часть и увидеть отправку, за которой следует сброс. Я могу подключиться к клиенту и пройти через вызовы select (в цикле), но он просто никогда не появляется. Кто-нибудь сталкивался с этим, и есть ли объяснение, кроме ошибки кодирования?

Другими словами, если у вас есть подключенный сокет и вы делаете запись с одной стороны и чтение с другой, что может произойти в середине, чтобы вызвать что-то подобное?

Еще одна деталь - я использовал tcpdump в интерфейсе обратной связи и могу видеть пропущенное сообщение.

Ответы [ 2 ]

4 голосов
/ 18 июня 2009

Я видел, как это происходило в транзакциях SMTP раньше. У вас на компьютере работает антивирусный сканер? Если это так, попробуйте отключить его и посмотреть, если это имеет значение.

В противном случае, я бы предложил установить Wireshark , чтобы вы могли взглянуть на то, что на самом деле происходит.

1 голос
/ 18 июня 2009

Наконец-то - понюхав еще, я обнаружил проблему. Два сообщения отправлялись перед чтением (иногда, но редко ...), поэтому они оба были прочитаны, но обрабатывалось только первое. Вот почему казалось, что второе сообщение так и не пришло. Он был похоронен в приемном буфере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...