Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Неожиданное завершение сеанса связи по Ethernet (ARM <-> PC).
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Oleg_IT
Собственно сеанс связи так и не начинается. На ARM работает немного усечённый пример из пакета Keil LEDClient, на PC пробовал две программы, первая простейший эхо сервер на Qt, вторая тестовая программа servcons. Открытие канала проходит нормально, но потом программа на ARM (библиотека TCP_ARM_L) выдаёт команду FIN, канал закрывается и всё повторяется снова.
Сканы со снифира в приложении.
Почему разрывается соединение? Как исправить?

bzx
Копайте Ваш TCP/IP стек. Ищите причину, почему TCP сокет закрывается. Тупо можете посмотреть обработчики по FIN, т.е. причина почему он генерится.
Возможно, наступает таймаут по сокету.
Oleg_IT
Посмотрел, но ни чего "криминального" не увидел. Вся логика скрыта в библиотеке, в открытом коде только обработка статусов закрыт, свободен и канал открыт. Таймаут стоит 4 секунды, но команда FIN выдается сразу.
Вообще после некоторых попыток открыть канал статус сокета становится ..._SYN_SENT и больше не меняется.
bzx
Цитата(Oleg_IT @ Dec 4 2013, 15:47) *
Посмотрел, но ни чего "криминального" не увидел. Вся логика скрыта в библиотеке, в открытом коде только обработка статусов закрыт, свободен и канал открыт. Таймаут стоит 4 секунды, но команда FIN выдается сразу.
Вообще после некоторых попыток открыть канал статус сокета становится ..._SYN_SENT и больше не меняется.

Внимательнее на Ваши логи гляньте:
Цитата
5. 1,200с –> ACK port2323
6. 10,999c -> FIN port2323


И что Вы после этого хотите?
Сокет открыт, почти 10с, обмена нет. Очень большая вероятность что Ваш девайс сам по таймауту закрывает соединение, посылая FIN.
Ищите в настройках по умолчанию (defaul) Вашего стека время удержания открытого tcp соединения (сокета).

Проверить данную версию можно так. В отрытый сокет шлите с любой стороны что-то с интервалом в несколько секунд, но более 10с.
Oleg_IT
Да, на время я не посмотрел, по факту все эти строки вываливаются почти одновременно, вот меня это и сбило. Пока не пойму где тормозить может, в открытом коде ни каких задержек нет.
Oleg_IT
Цитата(bzx @ Dec 4 2013, 19:52) *
Сокет открыт, почти 10с, обмена нет.

Не совсем так, приведённый пример исключение, типичное время между ACK и FIN ~1с.
Программа в ARM получает статус TCP_STATE_CONNECT, проходит проверка tcp_check_send(soket_tcp); и посылает буфер данных, которые до PC не доходят, а вместо них приходит FIN.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.