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

  #5537  
Старый 05.02.2010, 17:09
AlexTheC0d3r
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
С нами: 9365528

Репутация: 425
По умолчанию

Цитата:
Сообщение от Nightmarе  
Попробуй её:
while true do
fWSRecv();

и через 5 секунд компостер повиснет окончательно.

я пока тут тесты с этими соксами провожу, уже за 2 дня 40 раз комп повис, приходилось перезагрузать.
может конечно мой вопрос не корректен, так как не было времени особо разбирать функцию, но не лучше ли вставлять бесконечный цикл уже в самой функции, после открытия соединения и перед закрытием?

Код:
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));
 
while (TRUE) do
 begin // МММ??
 Send(hSocket, wRequest[1], length(wRequest), 0);
  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;
 
Ответить с цитированием