LINUX.ORG.RU

В каком случае блокирующий вызов recv может вернуть значение «0» ?


0

0

Есть некая программа выполняющая функции сервера.
Первое подключение клиента проходит без проблем. Иногда второе подключение проходить тоже без проблем, но вот третье и так далее проходят очень забавно(переподключения идут без задержек):

Происходит подключение (accept())
Затем обмен данными ... (recv, send)
В какой то момент блокирующий вызов recv начинает возвращать 0 байт!
При этом, если не закрывать соединение, обмен данными продолжается без проблем! Вокак!

Такое ощущение, что recv перестает блокировать!
Пробовал REUSEADDR - не помогло ....

Вот такая проблема!
Как с этим бороться?

anonymous

0 возращается когда пидорас на том конце закрыл соединение .. прочекай с каким параментром вызываешь listen .. то что продолжается обмен пакетами это нормально .. если заметил то обмен продолжается только в одну сторону, это так называемый half-closed connection, тот пидарас закрыл соединение(не пошлет тебе ни байта больше) но может принять еще данные от тебя может ..

lg ★★
()

Вариантов может быть несколько, от разрыва соединений до изменённых параметров сокета. Что за сервак (параллельный, последовательный )? Чё как, мало ты показал нам? netstat что рисует?

Oksiv
()

Всем спасибо за участие, вопрос исчерпан ... И в правду на том конце КАЗЁЛ какой то рвал соединение ... Но как то странно все это было ... что то еще я не понял ...

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