|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Непонятная ситуация с количеством подключений TServerSocket
Здравствуйте!
Пишу многопоточный сервер на TServerSocket. В принципе все реализовал, но при тестовых прогонах не пробовал более 3-6 подключений, а в момент генерального теста подключений было более 10 и вдруг выяснилось, что реально могут работать только 8 соединений. Когда начал разбираться, оказалось, что начиная с 9 соединения новый поток создается, но данные от клиента не приходят и возникает таймаут на этой строке: if (not Terminated) and (not fSocketStream.WaitForData(TIMEOUT)) then Подскажите пожалуйста, в чем может быть причина? Вот основной код потока: Код:
procedure TServerThread.ClientExecute; var fRequest : AnsiString; p : Integer; begin try fSocketStream:=TWinSocketStream.Create(ClientSocket,TIMEOUT); try while (not Terminated) and (ClientSocket.Connected) do try if (not Terminated) and (not fSocketStream.WaitForData(TIMEOUT)) then begin ClientOff(msg_Connection_Timeout); break; end; if (not Terminated) then begin fRequest:=''; if fSocketStream<>nil then begin SetLength(fRequest,ClientSocket.ReceiveLength()); SetLength(fRequest,ClientSocket.ReceiveBuf(Pointer(fRequest)^,Length(fRequest))); end else begin ClientOff(msg_Connection_Closed); break; end; p:=Pos(Chr($0D),fRequest); if (p>0) and (not Terminated) then begin //Обработка пакетов end else begin ClientOff(msg_Connection_Closed); end; end; Application.ProcessMessages; except on e:exception do begin ClientOff(msg_Connection_Closed); end; end; finally ClientOffmsg_Connection_Closed); end; except on e:exception do begin ClientOff(msg_Connection_Closed); end; end; inherited; end; |