170 похожих чатов

Всем привет, поясните, что происходит. Разбираюсь с сокетами, есть комп

и ноут, подключены к роутеру по wifi. На ноуте запускаю своё серверное приложение, которое принимает соединение и принимает нему данные. На компе запускаю свою клиентскую программу, где по командам вызываю методы connect, close, shutdown, disconnect итд. После коннекта запускаю передачу 1ГБ данных
1) Если на подключенном клиенте вызвать Close(), отправится пакет RST, передача оборвется, всё логично.
2) Если вызвать shutdown и затем disconnect и close(), то данные продолжат передаваться, даже после закрытия программы. Видимо из-за вызова shutdiwn ОС удерживает сокет и обеспечивает передачу ранее установленных данных
3) Но если после передачи я вызываю метод disconnect, то поведение ничем не отличается от предыдущего случая. Данные продолжают передаваться после закрытия программы. Почему?

7 ответов

10 просмотров

net core или framework?

как вы данные передаете?

Скорее всего дело в опции Linger, попробуйте отключить её. Socket LingerState.Enabled=false Disconnect не завершает соединение

Константин- Автор вопроса
Пользователь 6197e
Скорее всего дело в опции Linger, попробуйте отклю...

отправляю через socket.send(byte[]), спасибо, почитаю и попробую

Константин
отправляю через socket.send(byte[]), спасибо, почи...

Shutdown гарантирует что будут отправлены все данные. (Linger)

Константин- Автор вопроса
Пользователь 6197e
Shutdown гарантирует что будут отправлены все данн...

насколько я понял, Linger определяет сколько времени сокет будет жить после вызова Close и сколько времени он будет пытаться передать данные. У меня по умолчанию он был отключен. Непонятно, почему при вызове disconnect без вызова shutdown данные продолжают передаваться

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта