LINUX.ORG.RU

select & Co


0

0

Всем привет!

Кратко. Есть клиент-сервер. Клиенты коннектяцца и не посылают никаких данных, а только получают. Сервер имеет туеву хучу клиентов, некислые требования к производительности и весьма ограниченные системные ресурсы.

Все клиенты вешются в селект, один select! Необходимо игнорировать данные от клиентов, их не должно быть. Чтобы селект не вывыливался постоянно бестолку. Для этого можно просто не включать клиентские дескрипторы в первый набор селекта(на чтение). Но как тогда отлавливать дисконнект(0 байт при чтении)? Решил впервые поюзать 3й набор (исключения), и с прискорбием обнаружил, что дисконнект не входит в исключительные ситуации сокетов.

Требуется: отлавливать дисконнект клиента, но чтобы селект никак не реагировал на непустые данные от клиентов(чтоб не было ддоса). Маны не помогли....щас ковыряю сырцы кернела, изучая его реализацию....может кто поможет?

Спасибо.

PS. Сильно ломать структуру программы нельзя.

Может SO_RCVLOWAT поставить побольше?

vasirck
()
Ответ на: комментарий от MKuznetsov

Ну буфер чтения увеличивать... это не спасёт от приёма данных и отожрёт ресурсов, а вот shutdown.... щас попробую, хотя терзают смутные сомнения, что если перекрыть данные, приходящие от клиента, то 0 дисконнекта тоде не дойдёт....trying....

farisey
() автор топика
Ответ на: комментарий от farisey

Неа... делаю shutdown(fd,SHUT_RD) и следующий селект, немедленно вываливаясь, сообщает, что от клиента пришли данные. Читаю - ноль!(дисконнект)...не пойдёт!

farisey
() автор топика
Ответ на: комментарий от vasirck

Понимаю...тока хотелось бы вываливаться при дисконнекте, а остальное игнорировать в принципе... видимо нельзя так....а жаль...

farisey
() автор топика
Ответ на: комментарий от vasirck

..значит придётся делать периодический опрос всех клиентов, потому как данные отсылаются им редко, а дисконнект нужно оооочень своеверменно отлавливать - сразу!...так что это всё костыли на самом деле. Хочется нативного решения...или уверенности, что его вообще нет. Чтоб уостыли вставлять не оглядываясь.

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