Столкнулся с неприятной задачей. В TCL работа с событиями сокетов ведется через select. Т.е. мы получаем сокет через socket и добавляем его к таблице других сокетов.
Так вот во фре на ура у меня получается сокет больше чем 1024, который по умолчанию не влазиет в таблицу(FDSET).
Что тут делать?
Возможно ли фре ограничить выдаваемые сокеты < 1024 либо может есть у кого другие варианты решения этой задачи.
Про TCL не знаю. А так вообще есть poll()
>Про TCL не знаю. А так вообще есть poll()Да это понятно, я бы сделал сам на kqueue, но почему идет увеличение номеров сокетов. Такое ощущение что они не закрываются. Можно ли через netstat глянуть количество открытых сокетов?
>Можно ли
>через netstat глянуть количество открытых сокетов?Разумеется, возможно (man netstat?!). Можно воспользоваться еще lsof в большинстве GNU/Linux дистрибутивов идёт в штатной поставке. Для FreeBSD есть в портах.
>Столкнулся с неприятной задачей. В TCL работа с событиями сокетов ведется через
>select. Т.е. мы получаем сокет через socket и добавляем его к
>таблице других сокетов.
>Так вот во фре на ура у меня получается сокет больше чем
>1024, который по умолчанию не влазиет в таблицу(FDSET).
>Что тут делать?
>Возможно ли фре ограничить выдаваемые сокеты < 1024 либо может есть у
>кого другие варианты решения этой задачи.При создании сокетов надо запоминать наибольший из них и при вызове select передавать max+1 в первый аргумент!
Стивенс. Разработка сетевых приложений стр.189А во фре есть такая класная штука как kevent! Она лучше чем select.
>При создании сокетов надо запоминать наибольший из них и при вызове select
>передавать max+1 в первый аргумент!Как это в сях делается я понимаю.... почему вот они больше 1024 лезут, когда реально открытых 2-3 сокета...
>
>А во фре есть такая класная штука как kevent! Она лучше чем
>select.Согласен, штука классная... :) Если бы я еще TCL решил перелопатить ;)
>Столкнулся с неприятной задачей. В TCL работа с событиями сокетов ведется через
>select. Т.е. мы получаем сокет через socket и добавляем его к
>таблице других сокетов.
>Так вот во фре на ура у меня получается сокет больше чем
>1024, который по умолчанию не влазиет в таблицу(FDSET).
>Что тут делать?
>Возможно ли фре ограничить выдаваемые сокеты < 1024 либо может есть у
>кого другие варианты решения этой задачи.или Вы вопрос формулируете неправильно,
или у Вас пока чехорда между понятиями файловый дескриптор и сокет..
чтобы понять разницу :
fd=socket(...);
printf("FD=%d",fd); /*< в 1024 влезает на раз :) - верхняя планка - число открытых файлов на процесс */то есть беспокоиться, что номер дескриптора не влезет FDSET надо через ulimit (или как там он бышь во фре)