ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
11 июля
367121
VVB (08.11.2012 11:33, просмотров: 37695)
Общий вопрос по TCP/IP: что делать с передачей данных при потере линка? Вариантов может быть несколько. Любой стек требует низкоуровневых функций вывода, привязанных к конкретному МАС. Т.к. я использую lwIP, то и поведу речь о нём. Речь идёт только о функции низкоуровневого вывода данных по ethernet, назовём её write_eth(). Наличие линка определяется в начале функции. Вариант 1: ничего-не-передавать, увеличить счётчик ошибок, возвратить управление. Разборки останутся стеку (если это TCP, то девайс будет ждать ACK, который гарантированно не придёт, потому что пакет не отправился, при отсутствии ACK в течение заданного времени будет сделано заданное число повторов передачи пакета, затем, предположительно, сетевое соединение TCP разорвётся; если это UDP то стек ничего не будет делать). Вариант 2: блокировать функцию write_eth() до момента появления линка. Минус: также будет блокироваться весь стек lwIP, потому что работа стека осуществляется в той же задаче (tcpip_thread), из которой и производится вызов write_eth(). Вариант 3: сразу разорвать моё сетевое соединение TCP (о котором write_eth ничего не знает) при его наличии Вариант 4: разорвать моё сетевое соединение TCP (о котором write_eth ничего не знает) при его наличии через некоторое время.