Delphi Socket Connect Timeout 套字节链接超时设置


本文整理自网络,侵删。

 
Function ConnectTimeOut(pAddr:PAnsiChar; uPort:Word; uTimeOut:Byte = 3):TSocket;
Var
  hSocket   :TSocket;
  Addr      :TSockAddrIn;
  uFalg     :u_long;
  WriteDset :TFDset;
  ExceptDset:TFDset;
  TimeVal   :TTimeVal;
begin
  Result               := INVALID_SOCKET;
  Addr.sin_family      := AF_INET;
  Addr.sin_port        := htons(uPort);
  Addr.sin_addr.s_addr := inet_addr(pAddr);
  if (Addr.sin_addr.s_addr = SOCKET_ERROR) then Exit;
  hSocket  := Winapi.WinSock.socket(AF_INET, SOCK_STREAM, 0);
  if hSocket = INVALID_SOCKET then Exit;
   
  uFalg  := 1;
  if ioctlsocket(hSocket, FIONBIO, uFalg) = NO_ERROR then 
  begin
    connect(hSocket, Addr, SizeOf(TSockAddrIn));
    uFalg := 0;
    if ioctlsocket(hSocket, FIONBIO, uFalg) = NO_ERROR then
    begin
      FD_ZERO(WriteDset);
      FD_ZERO(ExceptDset);
      FD_SET(hSocket, WriteDset);
      FD_SET(hSocket, ExceptDset);
      TimeVal.tv_sec  := uTimeOut;
      TimeVal.tv_usec := 0;
      select(0, nil, @WriteDset, @ExceptDset, @TimeVal);
      if (FD_ISSET(hSocket, WriteDset)) then
        Result := hSocket; 
        Exit;
    end;  
  end;  
  shutdown(hSocket, SD_BOTH);
  closesocket(hSocket); 
end;

来源:https://www.7xcode.com/archives/102.html

相关阅读 >>

Delphi 自动升级组件autoupgrader简单教程

Delphi 为idhttp伪造session

Delphi tstringlist 自带 split 用法

Delphi2007-Delphi2010 程序不出现在任务栏的方法

monthdays:给出一个月的天数

Delphi touchkeyboard1 基本用法

Delphi分割字符串的函数--extractstrings

Delphi rect()

Delphi 中的自动引用计数使用规则

Delphi有无生成空格的函数,like vb的space(1)

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...