Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.29;
Скачать: CL | DM;

Вниз

SOMAXCONN   Найти похожие ветки 

 
Nucer   (2008-01-26 18:06) [0]

Вот наткнулся на такую вещь в WinSock:
SOMAXCONN = 5;
Получается в очереди на подключение одновременно находиться могут только 5 клиентов?

По-моему это очень маленькое значение...
Можно ли в Listen указывать число больше пяти?


 
Сергей М. ©   (2008-01-26 18:20) [1]

можно.
но не нужно, если не понимаешь, откуда берется эта пятерка


 
Nucer   (2008-01-26 18:30) [2]

Откуда берется - не понимаю. Она тупо прописана в winsock.pas. В msdn написано, что используйте SoMaxConn, но способа узнать конкретное значение нет.

http://msdn2.microsoft.com/en-us/library/ms739168(VS.85).aspx

The maximum length of the queue of pending connections. If set to SOMAXCONN, the underlying service provider responsible for socket s will set the backlog to a maximum reasonable value. There is no standard provision to obtain the actual backlog value.

Вот и не понятно с чего вдруг в winsock.pas прописано именно SOMAXCONN = 5; Может это значение актуально для первой версии библиотеки winsock, а во второй константу можно значительно увеличить?
К примеру, значение 30 - всегда ли будет работать?


 
Сергей М. ©   (2008-01-26 19:05) [3]


> К примеру, значение 30


А нахрена ? И почему не 300 и не  3000000 ?


 
Nucer   (2008-01-26 22:02) [4]

Надо повысить, т.к. сервер сбрасывает соединения чего делать не должен (нагрузка не такая уж и большая, около 50 соединений в секунду). Насколько я понял, узкое горло - именно SoMaxConn. Посмотрел модуль IdWinSock2.pas, там:
somaxconn = $7fffffff;

В итоге вопрос, какое можно установить значение? Я так понимаю вместо SoMaxConn должна использоваться какая-то зарезервированная константа (типа $7fffffff), а не "5", как прописано в winsock.pas.


 
Сергей М. ©   (2008-01-28 10:09) [5]


> Nucer   (26.01.08 22:02) [4]


Без ориентации на конкретную ОС и конкретную же версию используемого сокет-провайдера (в Winsock см. WSAStartup) разговор не имеет смысла.

Почитай это
http://rsdn.ru/Forum/message/267790.flat.aspx

Кр.того, подозреваю, что алгоритм, исполняемый твоим слушающим потоком, низкоэффективен и не оптимизирован, так что пляски с бубном вокруг backlog queue начинать рановато.


 
Nucer   (2008-01-28 19:53) [6]

Я уверен, что алгоритм не эффективен. В том же потоке, в котором вызывается функция Accept, выполняются SQL запросы к СУБД. Но проще увеличить SoMaxConn (временная мера), чем полностью переписать сервер с нуля.


 
Nucer   (2008-01-28 19:53) [7]

ОС - Windows 2003 Server x64


 
Сергей М. ©   (2008-01-29 08:26) [8]


> проще увеличить SoMaxConn (временная мера), чем полностью
> переписать сервер с нуля


Зачем его переписывать с нуля ?
Не так уж все и страшно.
Не думаю, что перенос логики работы с клиентом в отдельный поток так уж сложен.


 
Slym ©   (2008-01-29 09:08) [9]

Nucer   (28.01.08 19:53) [6]
В том же потоке, в котором вызывается функция Accept, выполняются SQL запросы к СУБД

вот и причина!
поток Accept должен породить другой поток и уже в этом новом потоке делай свой SQL


 
Сергей М. ©   (2008-01-29 09:52) [10]


> Slym ©   (29.01.08 09:08) [9]


Интересней, понимаешь ли, лечить не причину, а следствие)



Страницы: 1 вся ветка

Текущий архив: 2009.03.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
9-1177600266
$00FF00
2007-04-26 19:11
2009.03.29
Проблемы с трением


2-1233786331
Drowsy
2009-02-05 01:25
2009.03.29
Библиотеки на С++ для Дельфи.


1-1208355038
KSergey
2008-04-16 18:10
2009.03.29
Int64 и Integer Overflow


15-1232358556
Буратиноо
2009-01-19 12:49
2009.03.29
Перевод на С++


2-1233934102
SashaNikulin
2009-02-06 18:28
2009.03.29
Помогите решить простую задачу! SOS!