-
Доброго времени суток, уважаемые! Правильно ли я понимаю, что из-за прописанной в WinSock константы FD_SETSIZE = 64 более 64 потоков подключений с использованием сокетных классов (основанных на TCustomWinSocket) в блокирующем режиме обрабатывать я не смогу? И второй вопрос, вытекающий из первого. Как наиболее безболезненно переопределить FD_SETSIZE (например до 1000), чтобы все TCustomWinSocket работали уже с новым значением FD_SETSIZE. Если я просто изменю это значение в WinSock и перекомпилирую последний, думается мне, товарищи "эмбаркадеровцы" на меня обидятся (или лицензия delphi такие махинации позволяет?).
-
> Правильно ли я понимаю, что из-за прописанной в WinSock > константы FD_SETSIZE = 64 более 64 потоков подключений с > использованием сокетных классов (основанных на TCustomWinSocket) > в блокирующем режиме обрабатывать я не смогу?
Я точно могу сказать, что у меня есть и работают программы, в которых более 64 одновременных соединений и режим как раз блокирующий. FD_SETSIZE я не переопределял.
-
kernel © (23.05.10 12:56) 1. FD_SETSIZE используется только при вызове select 2. селеклится в 1 потоке FD_SETSIZE сокетов 3. потоков может быть больше чем 1 и больше вем 64... 4. руки проч от генофонда :) 5. ЦЕЛЬ КАКАЯ?
-
Slym © (25.05.10 12:53) [2] 6. можно вообще без select жить и тогда FD_SETSIZE по барабану
-
FD_SETSIZE влияет только на размер типа TFDSet, который используется в функции select. На количество одновременных подключений он никако не влияет. А TCustomWinSocket и иже с ним работают через AsyncSelect, а не через select, поэтому значение FD_SETSIZE им безразлично.
-
Благодарю всех ответивших!
Т.е., получается, для каждого нового вызова select с новой переменной типа TFDSet (в каждом новом потоке) будет назначено по FD_SETSIZE = 64? PS: у меня все равно есть пара мест, где я сам вызываю select (каждый select в новом потоке).
> 5. ЦЕЛЬ КАКАЯ?
Не дать обломаться 65-ому клиенту :)
-
Посмотри книгу "О чем не пишут в книгах о Delphi" там эта тема разжевана. Можно больше 64, но там массив из TFDSet'ов
|