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 在tunimemo中复制和粘贴选定的文本

delhi 获取进程图片

Delphi 支持通配符删除文件

解决Delphi程序在非中文系统下乱码

Delphi bytetype-单双字节判断

Delphi 让子窗体显示最大化

webbrowser里网页根据文字判断来点击链接

Delphi 串口控制继电器

Delphi 单元文件结构

Delphi 10.3.3 启动cnpack ide 专家 cnwizards coreide260.bpl错误解决办法

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



打赏

取消

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

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

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

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

评论

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