Показать сообщение отдельно

  #6  
Старый 04.02.2010, 20:11
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
С нами: 10018169

Репутация: 1680


По умолчанию

Помогите разобратсья с проблеммой. Есть функция на WinSock для отправки GET запроса на сервер, мне нужно запустить её в бесконечном цикле, чтобы она так и слала запрос на сервер.
Но проблемма в том, что если её запустить в бесконечном цикле, то программа начинает открывать огромное количество соединений, и до тех пор, пока компьютер окончательно не повиснет.
Помогите кто сможет, вот функция:
Код:
function fWSRecv(wHost, wRequest: string):string;
var
hSocket: TSocket;
hHost: PHostEnt;
hAddr: TSockAddrIn;
hTimeout: TTimeVal;
iRead: integer;
hBuffer: array[0..buffsize] of char;
begin

 hSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 hHost := gethostbyname(PChar(wHost));
 hAddr.sin_family := AF_INET;
 hAddr.sin_port := htons(80);
 hAddr.sin_addr := pinaddr(hHost^.h_addr^)^;
 hTimeout.tv_usec := 0;
 hTimeout.tv_sec := mstimeout;
 setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO, @hTimeout, sizeof(ttimeval));
 connect(hSocket, hAddr, SizeOf(hAddr));

 Send(hSocket, wRequest[1], length(wRequest), 0);
 while (TRUE) do
 begin
  FillChar(hBuffer, SizeOf(hBuffer), 0);
  iRead := Recv(hSocket, hBuffer, length(hBuffer), 0);
//  hData := hData + copy(hBuffer, 0, iRead);
  if (iRead <= 0) then break;
 end;
 CloseSocket(hSocket);
//result := hData;
end;
Вызываю так:
WSAStartup($202, wsData);
fWSRecv('localhost',
'GET /log/ass.php' + #13#10 +
'Host: localhost' + #13#10 +
'User-Agent: Mozilla/5.0' + #13#10 +
'Accept: text/html' + #13#10 +
'Accept-Language: ru' + #13#10 +
'Accept-Charset: windows-1251' + #13#10 +
'Connection: close' + #13#10#13#10);

Где бы я не ставил цикл "while true do", хоть в самой функции, хоть перед вызовом fWSRecv, всё одно и тоже. Данные шлёт, но не долго, пока комп не упадёт =))
Что тут можно сделать, чтобы он бесконечно посылал запрос на сервер при этом не нагружая компьютер и не открывая кучу ненужных соединений?
 
Ответить с цитированием