URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6180
[ Назад ]

Исходное сообщение
"Как отследить завершение tcp соединеня клиентом"

Отправлено Tux , 18-Фев-07 18:59 
sys/socket.h
Создаю слушающий сокет TCP
Сокет as=accept(.....
Как для as отследить звершение соеднения клиентом?
Спасибо

Содержание

Сообщения в этом обсуждении
"Как отследить завершение tcp соединеня клиентом"
Отправлено ACCA , 21-Фев-07 02:46 
>sys/socket.h
>Создаю слушающий сокет TCP
>Сокет as=accept(.....
>Как для as отследить звершение соеднения клиентом?

recv вернёт что-нибудь < 1
send вернёт < 0


"Как отследить завершение tcp соединеня клиентом"
Отправлено solaris , 02-Май-07 18:08 
>sys/socket.h
>Создаю слушающий сокет TCP
>Сокет as=accept(.....
>Как для as отследить звершение соеднения клиентом?
>Спасибо


while (int bytes = recv(...)) {

}

будет читать и нормально обработает разрыв коннекта либо тобой либо сервером.


"Как отследить завершение tcp соединеня клиентом"
Отправлено ram_scan , 04-Май-07 14:27 
>while (int bytes = recv(...)) {
>
>}
>
>будет читать и нормально обработает разрыв коннекта либо тобой либо сервером.

Надо делать две проверки bytes после выхода из цикла только. На 0 (закрытие соединения) и на -1 (ошибка). В первом случае все OK и соединение закрыто, во втором надо лазить в errno и выяснять что случилось.


"Как отследить завершение tcp соединеня клиентом"
Отправлено Gregory , 05-Май-07 19:39 
>>sys/socket.h
>>Создаю слушающий сокет TCP
>>Сокет as=accept(.....
>>Как для as отследить звершение соеднения клиентом?
>>Спасибо
>
>
>while (int bytes = recv(...)) {
>
>}
>
>будет читать и нормально обработает разрыв коннекта либо тобой либо сервером.

Угу. и загрузит процессор до усрачки? select и poll у нас уже не модны?


"Как отследить завершение tcp соединеня клиентом"
Отправлено Alexander S. Salieff , 08-Май-07 18:10 
>>>sys/socket.h
>>>Создаю слушающий сокет TCP
>>>Сокет as=accept(.....
>>>Как для as отследить звершение соеднения клиентом?
>>>Спасибо
>>
>>
>>while (int bytes = recv(...)) {
>>
>>}
>>
>>будет читать и нормально обработает разрыв коннекта либо тобой либо сервером.
>
>Угу. и загрузит процессор до усрачки? select и poll у нас уже
>не модны?


Пардоньте, а с каких это пор у нас recv на блокированном сокете грузит процессор? :-О Вообще-то он стоит на I/O wait'е потребляя при этом ->0% cpu. Сетевые демультиплексоры, это, конечно, вещь очень нужная и хорошая, но существуют примитивные задачи, где их применение избыточно...