InternetSetOption中的连接超时不起作用

时间:2015-09-14 11:56:17

标签: delphi

理论上,连接尝试应在5秒后终止。然而在实践中我仍然无限超时。有没有办法从外面终止连接。例如,我可以使用计时器,然后执行适当的功能来中止。另一个讨厌的解决方法是使用TerminateThread函数来消防它。

function DownloadFile(URL, {User, Pass,} FileName: string): Boolean;
const
  BufferSize = 1024;
var
 hSession, hURL: HInternet;
 Buffer: array[1..BufferSize] of Byte;
 BufferLen,Connect_timeout: DWORD;
 F: File;
 User,Pass:string;
begin
  User:='';
  Pass:='';

  Result := False;
  hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0) ;

  Connect_timeout := 5000 ;
  InternetSetOption(hSession, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@Connect_timeout), sizeof(Connect_timeout));

  // Establish the secure connection
  InternetConnect (
 hSession,
 PChar(URL),
 INTERNET_DEFAULT_HTTPS_PORT,
 PChar(User),
 PChar(Pass),
 INTERNET_SERVICE_HTTP,
 0,
 0
 );

try
    hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0) ;
try
  AssignFile(f, FileName);
  Rewrite(f,1);
  try
    repeat
      InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen) ;
      BlockWrite(f, Buffer, BufferLen)
    until BufferLen = 0;
  finally
    CloseFile(f) ;
    Result := True;
  end;
finally
  InternetCloseHandle(hURL)
end
finally
  InternetCloseHandle(hSession)
end;
end;

0 个答案:

没有答案