![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сервис грузит процессор [D5, D6, Win2k, WinXP]
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]Ты бы хоть написал на каком сокете (блокирующем или нет) построен твой сервис и алгоритм подключения клиента, тогда можно что-нибудь сказать