Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.059 c
2-1234175149
b@v
2009-02-09 13:25
2009.03.29
Отчет


15-1233142456
XeON
2009-01-28 14:34
2009.03.29
Обрезка изображения


15-1232383209
Добежал
2009-01-19 19:40
2009.03.29
Запретить Windows уходить в hibernate и отключать экран


8-1192042116
Shaitan
2007-10-10 22:48
2009.03.29
Эквалайзер-это утопия


2-1233154226
Scot Storch
2009-01-28 17:50
2009.03.29
наследник TForm





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский