LINUX.ORG.RU

TCP и UDP


0

1

На принимающей стороне я открыл сокет по протоколу TCP или UDP. Отправитель исправно шлет мне данные, которые я не читаю (но мое приложение приконнектилось к соответствующему порту на принимающей стороне) вопрос такой - что происходит с данными на принимающей стороне? Если Я вызову read/recv через сутки непрерывного приема, что я прочитаю? Иными словами сколько времени ОС хранит принятые данные (Linux, BSD, Windows)? На этот аспект как я понимаю не влияет отрыл ли я сокет в блокирующем или неблокирующем режиме?

Буфер заполнится и отправитель перестанет передавать данные. В UDP пакеты скорее всего будут терятся, т.к. Flow Control'а нет.

elverion
()
Ответ на: комментарий от mskmsk1985

Похерятся пакеты. Максимум то, что в буфере будет, вычитаешь.

tanenn
()

TCP соединение отвалится через какое-то время, UDP пакеты просто будут уходить в никуда. В буфере скорее всего останутся первые полученные пакеты, суточной давности, но это я точно не могу сказать.

unC0Rr ★★★★★
()

tcp когда заполнится внитренний буфер ядра сокет скажет пока. автоматический реконнект возможен в случае /proc/sys/net/ipv4/tcp_abort_on_overflow = 1. Про размер буфера смотри tcp_mem/tcp_rmem, man setsockopt, man 7 tcp.

udp отправляет не байты, а дейтаграммы. Если на принимающей стороне их никто не читает, то система сохраняет их в /dev/null. Если ты через сутки прочитаешь что-либо, то прочитаешь самую раннюю дейтаграмму, которую система ещё не успела сохранить в /dev/null. udp_mem, man 7 udp.

nanoo_linux
()
Ответ на: комментарий от pozitiffcat

Сокет, это НЕ полимеры.

сокет будет похерен

В случае TCP должен заполнится приемный буфер в ядре для данного соединения. Потом ядро не будет давать «окно» для посылающей стороны, соответственно она не будет иметь право что-то посылать. Если прикладное ПО посылающей стороны нормально написано, то оно должно остановиться и терпеливо ждать, когда с противоположной стороны проснуться и соизволят прочитать из сокета.

pathfinder ★★★★
()
Ответ на: комментарий от mskmsk1985

C TCP все понятно, больший интерес представляет именно поведение UDP на принимающей стороне.

UDP пакеты по-идее должны теряться.

pathfinder ★★★★
()
Ответ на: Сокет, это НЕ полимеры. от pathfinder

Если написано не коряво, а с такой обработкой и ожиданием, то все будет ок, хоть 100 лет можно ждать. Не коряво можно и UDP обрабатывать.. да что угодно. А кривыми руками можно испортить что угодно

pozitiffcat ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.