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 lockbox 做加密解密

Delphi 开发安卓时判断进入非活动

Delphi 通�^窗口句柄或窗口标题得到进程句柄

Delphi 实现代码重启android app

Delphi之完美splash方案

Delphi dbnavigator1 删除时弹出确认对话框

Delphi 2009 之 tstringbuilder 类[2]: append 与 appendformat

Delphi一个基于wininet的http操作小函数

Delphi 编写activex控件(ocx控件)的知识和样例

Delphi sqlite 自动编号的实现

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



打赏

取消

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

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

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

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

评论

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