реклама на сайте
подробности

 
 
> Вопрос по LwIP, сепарация копий pcb
Petr_
сообщение Mar 29 2016, 07:57
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 15-03-16
Пользователь №: 90 876



Всем добрый день.

Возник вопрос по разделению различных соединений TCP в LwIP.
Открываю первое соединение. В обработчике ...accept
получаю некий pcb (смотрю ссылку - она 536898084 (преобразование ссылки в число)).
Далее не закрывая предыдущее соединение открываю второе с того же IP
и к тому же порту! Это важно.
В ...accept получаю ссылку уже на другой pcb (536897788)
Все нормально.
Но далее замечаю, что данные поступают с обоих соединений на ОДИН из 2-х существующих pcb.
При открытии соединения с разных IP или на разные порты такой проблемы не возникает.

Вообще этот эффект (если я правильно его идентифицировал) вызывает
большие и непреодолимые проблемы при поддержке нескольких пользователей.
Допустим 2-й послал некую команду и закрыл соединение.
Закрылся первый pcb (для каждого уникального pcb я создаю уникальный контекст пользователя).
Это выгрузит контекст 1 из памяти и закроет 1-й pcb.
При этом пользователь 1 такую команду не подавал.
И кроме того контекст 2 и 2-й pcb не выгружены из памяти! Конечно они могут быть закрыты по таймеру, но это не решение вообще.

Ситуация, когда с одного IP и к одному порту создается несколько соединений абсолютно нормальна.
Это делают все браузеры для запросов разных объектов на странице (к порту 80).
Также (как пример) это может сделать Total Commander при открытии фоновой загрузки по FTP (к порту 21).
Поэтому ситуация абсолютно жизненная.

Этот вопрос в документации на LwIP не освещен абсолютно.
Кто что знает?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Mar 29 2016, 08:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



У меня сделан веб сервер на lwip. Браузер открывает по два соединения одновременно. Никаких проблем не возникает. Ищите косяк у себя.
Go to the top of the page
 
+Quote Post
Petr_
сообщение Mar 29 2016, 08:53
Сообщение #3





Группа: Участник
Сообщений: 14
Регистрация: 15-03-16
Пользователь №: 90 876



Цитата(scifi @ Mar 29 2016, 08:29) *
У меня сделан веб сервер на lwip. Браузер открывает по два соединения одновременно. Никаких проблем не возникает. Ищите косяк у себя.


У ВСЕХ WEB сервер сделанный на LwIP работает.
Но это вовсе не означает отсутствие этой проблемы.
Поскольку браузер посылает один запрос HTTP при открытии соединения.
Он сразу обрабатывается и файл ставиться на отправку.
Далее браузер уже ничего не передает серверу.
По окончании отправки соединение закрывает сервер.
В этой цепочке событий проблема не возникает.

А вот если клиент посылает команды с паузой и после получения данных
по тому же соединению (ответ на предыдущие команды FTP, к примеру) - проблема возникает.
Конечно я могу ошибаться. Естественно.
Но прежде чем задавать вопрос я отследил проблему и обоснованно задал вопрос.
Эксперимент проводил просто и наглядно.
Открываю 2 копии гипертерминала на одной машине к серверу к некому порту (21-му)
Сервер вываливает ссылки на pcb и принятые данные через USART на обычный ком порт.
Ну и вижу сами данные и на какую копию pcb они сваливаются.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 29 2016, 09:09
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Petr_ @ Mar 29 2016, 11:53) *
У ВСЕХ WEB сервер сделанный на LwIP работает.
Но это вовсе не означает отсутствие этой проблемы.

Специально сделал захват пакетов. Посмотрите, там оч. хорошо видно, что идёт одновременная передача данных по разным соединениям.
Прикрепленные файлы
Прикрепленный файл  web_pcap.zip ( 11.15 килобайт ) Кол-во скачиваний: 8
 
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016