Я работаю во встроенной среде Linux.telnet клиентское соединение перестает получать данные, сервер по-прежнему отправляет
он запускает демон telnet при запуске, который следит за конкретным портом и запускает программу при получении соединения.
т.е.
telnetd -l /usr/local/bin/PROGA -p 1234
PROGA - будет выводить некоторые данные через неравные промежутки времени. Когда он не выводит данные, каждый X-период времени отправляет строку типа «сердцебиение», чтобы клиент знал, что мы все еще активны, т.е. «heartbeat \ r \ n»
После случайного количества времени, клиент (используйте версию Линукс из телнета, выдвинутая: telnet xxx.xxx.xxx.xxx 1234)
не сможет получить «биение сердца \ г \ п»
данные клиент видит:
heartbeat
heartbeat
heartbeat
...
heartbeat
[nothing, should have received heartbeat]
[nothing forever]
сердцебиения посылается:
result = printf("%s", heartbeat);
проверка результат, всегда длина heartbeat
. Вход в системный журнал показывает нам, что printf()
выполняет с успехом в соответствующих интервалах
Я с тех пор добавил в tcdrain и fflush, которые возвращают успех, но не похоже, чтобы помочь ситуации.
Любая помощь будет оценена по достоинству.
** UDPATE: получил захват проводов с сервера. Очень ясно, что сердцебиение посылается непрерывно. Нет Hicups, никаких задержек. Нашел что-то интересное на клиенте. Клиент в этом случае (telnet на Ubuntu 9.04), кажется, внезапно перестает получать сердцебиение (как описано выше). Wireshark подтверждает это, большая пауза в пакетах. Ну, как только клиент перестает получать сердцебиение, нажатие любого нажатия клавиши (на клиенте), похоже, вызывает отталкивание данных из буфера клиента (все пульса). Wireshark на клиенте также показывает этот массивный объем данных в одном пакете.
К сожалению, я действительно не знаю, что это значит. Это режим линии вкл/выкл? Линейные окончания (\ r \ n) очень четко проходят.
** Обновление 2: запуск netcat вместо telnetd, проблема не воспроизводится.
Каковы другие строки, которые вы отправляете? если вы отправляете 255 байт, его нужно экранировать ... – Spudd86
Я не думаю, что другие строки релевантны, так как эта ошибка/проблема может быть воспроизведена только путем отправки строки «heartbeat» снова и снова – Tree77