tonyk_av 39 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба Кажись, разобрался. У W5500 есть полузакрытое состояние сокета, когда с ним работать уже нельзя, но данные он принимать может, да-да, как раз данные с флагом FIN. Именно в находясь в этом состоянии, нужно решать, что делать с сокетом дальше: оставаться в этом состоянии, разорвать соединение или вообще закрыть сокет. Я стал проверять наличие данных в буфере сокета в этом полузакрытом состоянии перед разрывом связи- и заработало! То есть W5500 не отсылает сообщение о разрыве связи, пока я не вычитаю данные из буфера сокета. Как только данных не стало- разрываю соединение с клиентом. Так что благодарю за дельную мысль! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 217 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 1 час назад, tonyk_av сказал: У W5500 есть полузакрытое состояние сокета, когда с ним работать уже нельзя, но данные он принимать может, да-да, как раз данные с флагом FIN. Это не у W5500, а у TCP-соединения такое состояние имеется. W5500 только реализует состояния TCP. Отлично, что удалось найти проблему и решить её! Рад за Вас. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 39 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба 1 minute ago, jcxz said: Это не у W5500, а у TCP-соединения такое состояние имеется. W5500 только реализует состояния TCP. Да, так точнее. У W5500 есть внутренний конечный автомат и считывая его состояние нужно в каждом состоянии делать те или иные действия. Этих состояний штук 40, вроде. Пользователю нужно десяток-дюжина. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 217 4 августа, 2023 Опубликовано 4 августа, 2023 · Жалоба Вам тоже спасибо. Хоть и нечаянно, но по ходу обсуждения вы натолкнули меня на мысль в поиске проблемы в моём проекте. И, похоже, я её нашёл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться