Всем добрый день.
Возник вопрос по разделению различных соединений 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 не освещен абсолютно.
Кто что знает?