Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сервис грузит процессор [D5, D6, Win2k, WinXP]


Страницы:   1 2

Borys ©   (2002-08-26 11:59:00) 

Написал сервис который висит ожидает коннекта (listen) soket делал API функциями, но проблема когда запускаю любую другую сетевую приблуду даже IE она начинает кушать процессрное время загрузка до 40%-60%. Когда сервис один даже с поключенными клиентскими частями ничего не грузит.
Что м.б. помогите?


Polevi   (2002-08-26 18:33:00) [21]

procedure TAcceptThread.Execute;
begin
...

if bind(FListenSocket, FAddr, SizeOf(FAddr))=SOCKET_ERROR then Terminate;
listen(FListenSocket, SOMAXCONN);

try
while not Terminated do
begin
Len:=sizeof(FAddr);
ClientSocket:=accept(FListenSocket, @FAddr, @Len);

...


Polevi   (2002-08-26 18:29:00) [22]

listen ничего не ждет - ждет accept


Digitman   (2002-08-26 18:27:00) [23]

>Borys


> ждет коннекта до посинения


Ну так а что ж ты хочешь , раз "до посинения" ?
Блокирующий вызов, осн.код.поток (скорее всего) - вот тебе и "грузит" твоя "приблуда" все на свете)

Или применяй асинхронный неблокирующий режим или выноси работу с гнездом в доп.код.поток. Да и в доп.потоке весьма желательно использовать неблок.режим, иначе не будет он реагировать ни на что, пока тот же упомянутый тобой listen() не вернет управление.


Borys   (2002-08-26 17:45:00) [24]

это просто опечатка, а команда listen ждет коннекта до посинения

While not(terminated) do
if listen(SSocket,MaxConect)=0 then begin
//принимаю клиента
end;


Digitman   (2002-08-26 16:47:00) [25]


> listen(SSocket,MaxConect)=0


а это чего такое ?
а где цикл ?


Borys   (2002-08-26 16:28:00) [26]

вот таким образом

Saddr.sin_family:=AF_INET;
Saddr.sin_port:=htons(Sport);
Saddr.sin_addr.S_addr:=INADDR_ANY;
SSocket:=socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
...
bind(SSocket,Saddr,sizeof(TSockAddr))

listen(SSocket,MaxConect)=0


AlexAn   (2002-08-26 12:52:00) [27]

Ты бы хоть написал на каком сокете (блокирующем или нет) построен твой сервис и алгоритм подключения клиента, тогда можно что-нибудь сказать


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо