и ноут, подключены к роутеру по wifi. На ноуте запускаю своё серверное приложение, которое принимает соединение и принимает нему данные. На компе запускаю свою клиентскую программу, где по командам вызываю методы connect, close, shutdown, disconnect итд. После коннекта запускаю передачу 1ГБ данных
1) Если на подключенном клиенте вызвать Close(), отправится пакет RST, передача оборвется, всё логично.
2) Если вызвать shutdown и затем disconnect и close(), то данные продолжат передаваться, даже после закрытия программы. Видимо из-за вызова shutdiwn ОС удерживает сокет и обеспечивает передачу ранее установленных данных
3) Но если после передачи я вызываю метод disconnect, то поведение ничем не отличается от предыдущего случая. Данные продолжают передаваться после закрытия программы. Почему?
net core или framework?
как вы данные передаете?
Скорее всего дело в опции Linger, попробуйте отключить её. Socket LingerState.Enabled=false Disconnect не завершает соединение
отправляю через socket.send(byte[]), спасибо, почитаю и попробую
Shutdown гарантирует что будут отправлены все данные. (Linger)
насколько я понял, Linger определяет сколько времени сокет будет жить после вызова Close и сколько времени он будет пытаться передать данные. У меня по умолчанию он был отключен. Непонятно, почему при вызове disconnect без вызова shutdown данные продолжают передаваться
Обсуждают сегодня