Здравствуйте!
Пишу многопоточный сервер на 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;