The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Лимит сокетов 1024"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Лимит сокетов 1024"  
Сообщение от Дима (??) on 09-Янв-08, 22:50 
Здравствуйте!

Есть Select Socket Server на С++, к ниму подключаются клиенты.
Каждому клиенту пристаивается номер файлового дискриптора ID.
В линюксе у меня предел 1024. Удалось изменить эту цифру в самом сервере так:

#define FD_LIMIT = 2000

...

struct rlimit limit;
limit.rlim_max=FD_LIMIT;
limit.rlim_cur=FD_LIMIT;
if(setrlimit(RLIMIT_NOFILE, &limit)==-1) log("Error: unable to set limits\n");


проверял .. новые ID подключаются до 2000..

но как только достигается лимит 1024 и превышается возникают проблемы:
Все последующие подключения, даже с меньшими ID (если кто то дисконектился), после получения доли иформации отрубаются, а также сервер неполучает сигнала если клиент дисконектится..
Такое ощущение что сервер сам отправляет клиенту сигнал о завершении соединения.. а также неможет получить этот сигнал от клиента если клиент дисконнектит!

Может кто то встречался с этим? Посоветуйте что нибудь, может нужно что то ещё сделать? или другим способом увеличить число FD.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Лимит сокетов 1024"  
Сообщение от Ardzhan on 09-Янв-08, 23:27 
Я не уверен на все 100, но если ты отслеживаешь изменения статуса сокета через select(), то данную проблему можно решить либо перекомпилированием ядра, либо использованием функции poll() вместо select().
Полезно наверное почитать этот обзор: http://www.opennet.me/base/dev/socket_method.txt.html
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Лимит сокетов 1024"  
Сообщение от Дима (??) on 10-Янв-08, 00:13 
>Я не уверен на все 100, но если ты отслеживаешь изменения статуса
>сокета через select(), то данную проблему можно решить либо перекомпилированием ядра,
>либо использованием функции poll() вместо select().
>Полезно наверное почитать этот обзор: http://www.opennet.me/base/dev/socket_method.txt.html

Эту статейку уже читал.
Всё же с селектом я давно знаком и нехочется его менять)
Получается что ограничение на уровне ядра, нельзя отследить состояние сокетов?
У меня Suse9, как бы узнать, действительно ли там ограничение на уровне ядра.. и в каких системах его можно увеличить програмно..

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Лимит сокетов 1024"  
Сообщение от f00l email(??) on 10-Янв-08, 08:03 
>[оверквотинг удален]
>
>но как только достигается лимит 1024 и превышается возникают проблемы:
>Все последующие подключения, даже с меньшими ID (если кто то дисконектился), после
>получения доли иформации отрубаются, а также сервер неполучает сигнала если клиент
>дисконектится..
>Такое ощущение что сервер сам отправляет клиенту сигнал о завершении соединения.. а
>также неможет получить этот сигнал от клиента если клиент дисконнектит!
>
>Может кто то встречался с этим? Посоветуйте что нибудь, может нужно что
>то ещё сделать? или другим способом увеличить число FD.

Используй функции setrlimit & getrlimit.
Для получения информации в программе о лимитах и установки лимитов.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Лимит сокетов 1024"  
Сообщение от Дима (??) on 10-Янв-08, 13:48 
>[оверквотинг удален]
>>получения доли иформации отрубаются, а также сервер неполучает сигнала если клиент
>>дисконектится..
>>Такое ощущение что сервер сам отправляет клиенту сигнал о завершении соединения.. а
>>также неможет получить этот сигнал от клиента если клиент дисконнектит!
>>
>>Может кто то встречался с этим? Посоветуйте что нибудь, может нужно что
>>то ещё сделать? или другим способом увеличить число FD.
>
>Используй функции setrlimit & getrlimit.
>Для получения информации в программе о лимитах и установки лимитов.

Именно так я и повышал лимит, но этот лимит ещё указан и в библиотеках select() для FD_SETSIZE.
Т.е. сокеты то подключаются а вот таблицы FD_SET неработают как только размер в 1024 превышен )
setrlimit & getrlimit будут нормально работают для файлов, но не для сокетов Select()

Посидев ночку с добрым гуглом нашёл один выход:
1. /usr/include/bits/typesizes.h (прописывыем FD_SETSIZE 2048 и компилируем скрипт заного)
2. ulimit -n 2048 (выполнить перед запуском программы, что сразу более правильно устанавливает FD_LIMIT)

Вечером сделаю тест, должно сработать, думаю многим пришодится эта инфа)
Если непоможет, буду копать дальше.
А по поводу статейки в которой написанно что select() ограничен на уровне кернеля (max_files), походу ошибочка. Лимит этот меняется на любой, по дефолму у меня вообще 10 000 =)))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Лимит сокетов 1024"  
Сообщение от Michelnok (??) on 10-Янв-08, 15:31 
>А по поводу статейки в которой написанно что select() ограничен на уровне
>кернеля (max_files), походу ошибочка.

Не ошибочка, а учет всевозможных ядер. Если оно работает у вас, кто сказал что оно будет работать на каком-нибудь HP-UX или QNX?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Лимит сокетов 1024"  
Сообщение от Ardzhan on 11-Янв-08, 02:27 
>>А по поводу статейки в которой написанно что select() ограничен на уровне
>>кернеля (max_files), походу ошибочка.
>
>Не ошибочка, а учет всевозможных ядер. Если оно работает у вас, кто
>сказал что оно будет работать на каком-нибудь HP-UX или QNX?

Ну можно в принципе подправить исходники ядра и пересобрать

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Лимит сокетов 1024"  
Сообщение от Michelnok (??) on 11-Янв-08, 11:31 
>
>Ну можно в принципе подправить исходники ядра и пересобрать

Именно об этом и написано в статье.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру