LINUX.ORG.RU

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


0

0

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

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

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

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

anonymous

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

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

lg ★★
()

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

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

Oksiv
()

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

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

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