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

  #6  
Старый 22.08.2009, 00:38
ErrorNeo
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме:
4297091

Репутация: 2261


Отправить сообщение для ErrorNeo с помощью ICQ
По умолчанию

НTL, у тебя зависает на функции "recv"?

если да, то:
Код:
const
GP_TIMEOUT=10000; //это значит таймаут ожидания ответа 10 секунд
+
Код:
function recvdata(sock:TSocket):string;
var
  tv : timeval;
  fds : TFDSet;
  buf : array [1..20000] of char;
  res : string;
  r : integer;
  i:integer;
  inc,tmp:integer;
begin
  r:=1;
  while (r>0) do
  begin
    FD_ZERO(fds);
    FD_SET(sock, fds);
    tv.tv_sec := GP_TIMEOUT div 1000;
    tv.tv_usec := (GP_TIMEOUT mod 1000) * 1000;
    i := select(0, @fds, nil, nil, @tv);
    if (i <= 0) then
    begin
      break;
    end;
    r := recv(sock, buf, 20000, 0);
    res:=res+copy(buf,1,r);
  end;
  result:=res;
end;
ну и теперь просто вместо, к примеру,

recv(s,sBuff,5000,0);
юзаешь
reply:=recvdata(s);
где s:TSOCKET;

эта функция
Код:
uses
  Windows

Последний раз редактировалось ErrorNeo; 22.08.2009 в 01:02..
 
Ответить с цитированием