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

Исходное сообщение
"Проблема с select"

Отправлено Tverd , 23-Ноя-06 22:23 
Столкнулся с неприятной задачей. В TCL работа с событиями сокетов ведется через select. Т.е. мы получаем сокет через socket и добавляем его к таблице других сокетов.
Так вот во фре на ура у меня получается сокет больше чем 1024, который по умолчанию не влазиет в таблицу(FDSET).
Что тут делать?
Возможно ли фре ограничить выдаваемые сокеты < 1024 либо может есть у кого другие варианты решения этой задачи.

Содержание

Сообщения в этом обсуждении
"Проблема с select"
Отправлено DeadMustdie , 24-Ноя-06 10:21 
Про TCL не знаю. А так вообще есть poll()


"Проблема с select"
Отправлено Tverd , 25-Ноя-06 21:14 
>Про TCL не знаю. А так вообще есть poll()

Да это понятно, я бы сделал сам на kqueue, но почему идет увеличение номеров сокетов. Такое ощущение что они не закрываются. Можно ли через netstat глянуть количество открытых сокетов?


"Проблема с select"
Отправлено chip , 27-Ноя-06 08:16 

>Можно ли
>через netstat глянуть количество открытых сокетов?

Разумеется, возможно (man netstat?!). Можно воспользоваться еще lsof в большинстве GNU/Linux дистрибутивов идёт в штатной поставке. Для FreeBSD есть в портах.


"Проблема с select"
Отправлено BsDr , 24-Ноя-06 12:01 
>Столкнулся с неприятной задачей. В TCL работа с событиями сокетов ведется через
>select. Т.е. мы получаем сокет через socket и добавляем его к
>таблице других сокетов.
>Так вот во фре на ура у меня получается сокет больше чем
>1024, который по умолчанию не влазиет в таблицу(FDSET).
>Что тут делать?
>Возможно ли фре ограничить выдаваемые сокеты < 1024 либо может есть у
>кого другие варианты решения этой задачи.

При создании сокетов надо запоминать наибольший из них и при вызове select передавать max+1 в первый аргумент!
Стивенс. Разработка сетевых приложений стр.189

А во фре есть такая класная штука как kevent! Она лучше чем select.


"Проблема с select"
Отправлено Tverd , 25-Ноя-06 15:36 
>При создании сокетов надо запоминать наибольший из них и при вызове select
>передавать max+1 в первый аргумент!

Как это в сях делается я понимаю.... почему вот они больше 1024 лезут, когда реально открытых 2-3 сокета...

>
>А во фре есть такая класная штука как kevent! Она лучше чем
>select.

Согласен, штука классная... :) Если бы я еще TCL решил перелопатить ;)


"Проблема с select"
Отправлено Мимо проходил , 27-Ноя-06 18:44 
>Столкнулся с неприятной задачей. В TCL работа с событиями сокетов ведется через
>select. Т.е. мы получаем сокет через socket и добавляем его к
>таблице других сокетов.
>Так вот во фре на ура у меня получается сокет больше чем
>1024, который по умолчанию не влазиет в таблицу(FDSET).
>Что тут делать?
>Возможно ли фре ограничить выдаваемые сокеты < 1024 либо может есть у
>кого другие варианты решения этой задачи.

или Вы вопрос формулируете неправильно,
или у Вас пока чехорда между понятиями файловый дескриптор и сокет..
чтобы понять разницу :
fd=socket(...);
printf("FD=%d",fd); /*< в 1024 влезает на раз :) - верхняя планка - число открытых файлов на процесс */

то есть беспокоиться, что номер дескриптора не влезет FDSET надо через ulimit (или как там он бышь во фре)