⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synsock.pas

📁 很不错的东东
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  Result := libc.GetProtoByNumber(proto);
end;

function LSGetHostByName(name: PChar): PHostEnt;
begin
  Result := libc.GetHostByName(Name);
end;

function LSGetHostByAddr(addr: Pointer; len, Struc: Integer): PHostEnt;
begin
  Result := libc.GetHostByAddr(Addr, len, struc);
end;

function LSGetHostName(name: PChar; len: Integer): Integer;
begin
  Result := libc.GetHostName(Name, Len);
end;

function LSShutdown(s: TSocket; how: Integer): Integer;
begin
  Result := libc.Shutdown(S, How);
end;

function LSSetSockOpt(s: TSocket; level, optname: Integer; optval: PChar;
  optlen: Integer): Integer;
begin
  Result := libc.SetSockOpt(S, Level, OptName, OptVal, OptLen);
end;

function LSGetSockOpt(s: TSocket; level, optname: Integer; optval: PChar;
  var optlen: Integer): Integer;
begin
  Result := libc.getsockopt(s, level, optname, optval, cardinal(optlen));
end;

function LSSendTo(s: TSocket; var Buf; len, flags: Integer;
  var addrto: TSockAddr; tolen: Integer): Integer;
begin
  Result := libc.SendTo(S, Buf, Len, Flags, Addrto, Tolen);
end;

function LSSend(s: TSocket; var Buf; len, flags: Integer): Integer;
begin
  Result := libc.Send(S, Buf, Len, Flags);
end;

function LSRecv(s: TSocket; var Buf; len, flags: Integer): Integer;
begin
  Result := libc.Recv(S, Buf, Len, Flags);
end;

function LSRecvFrom(s: TSocket; var Buf; len, flags: Integer;
  var from: TSockAddr; var fromlen: Integer): Integer;
begin
  Result := libc.RecvFrom(S, Buf, Len, Flags, @from, @fromlen);
end;

function LSntohs(netshort: u_short): u_short;
begin
  Result := libc.NToHS(netshort);
end;

function LSntohl(netlong: u_long): u_long;
begin
  Result := libc.NToHL(netlong);
end;

function LSListen(s: TSocket; backlog: Integer): Integer;
begin
  Result := libc.Listen(S, Backlog);
end;

function LSIoctlSocket(s: TSocket; cmd: DWORD; var arg: u_long): Integer;
begin
  Result := libc.ioctl(s, cmd, @arg);
end;

function LSInet_ntoa(inaddr: TInAddr): PChar;
begin
  Result := libc.inet_ntoa(inaddr);
end;

function LSInet_addr(cp: PChar): u_long;
begin
  Result := libc.inet_addr(cp);
end;

function LShtons(hostshort: u_short): u_short;
begin
  Result := libc.HToNs(HostShort);
end;

function LShtonl(hostlong: u_long): u_long;
begin
  Result := libc.HToNL(HostLong);
end;

function LSGetSockName(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer;
begin
  Result := libc.GetSockName(S, Name, cardinal(namelen));
end;

function LSGetPeerName(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer;
begin
  Result := libc.GetPeerName(S, Name, cardinal(namelen));
end;

function LSConnect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer;
begin
  Result := libc.Connect(S, name, namelen);
end;

function LSCloseSocket(s: TSocket): Integer;
begin
  Result := libc.__close(s);
end;

function LSBind(s: TSocket; var addr: TSockAddr; namelen: Integer): Integer;
begin
  Result := libc.Bind(S, addr, namelen);
end;

function LSAccept(s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket;
begin
  Result := libc.Accept(S, addr, psocketlength(addrlen));
end;

function LSSocketProc(af, Struc, Protocol: Integer): TSocket;
begin
  Result := libc.Socket(Af, Struc, Protocol);
end;

function LSSelect(nfds: Integer; readfds, writefds, exceptfds: PFDSet;
  timeout: PTimeVal): Longint;
begin
  Result := libc.Select(nfds, readfds, writefds, exceptfds, timeout);
end;

{$ENDIF}

function InitSocketInterface(stack: string): Boolean;
begin
{$IFDEF LINUX}
  Accept := LSAccept;
  Bind := LSBind;
  CloseSocket := LSCloseSocket;
  Connect := LSConnect;
  GetPeerName := LSGetPeerName;
  GetSockName := LSGetSockName;
  GetSockOpt := LSGetSockOpt;
  Htonl := LShtonl;
  Htons := LShtons;
  Inet_Addr := LSinet_addr;
  Inet_Ntoa := LSinet_ntoa;
  IoctlSocket := LSioctlsocket;
  Listen := LSlisten;
  Ntohl := LSntohl;
  Ntohs := LSntohs;
  Recv := LSrecv;
  RecvFrom := LSrecvfrom;
  Select := LSselect;
  Send := LSsend;
  SendTo := LSsendto;
  SetSockOpt := LSsetsockopt;
  ShutDown := LSshutdown;
  Socket := LSsocketProc;
  GetHostByAddr := LSGetHostByAddr;
  GetHostByName := LSGetHostByName;
  GetProtoByName := LSGetProtoByName;
  GetProtoByNumber := LSGetProtoByNumber;
  GetServByName := LSGetServByName;
  GetServByPort := LSGetServByPort;
  GetHostName := LSGetHostName;
  WSAGetLastError := LSWSAGetLastError;
  WSAStartup := LSWSAStartup;
  WSACleanup := LSWSACleanup;
  Result := True;
{$ELSE}
{$IFDEF STATICWINSOCK}
  Accept := Winsock.Accept;
  Bind := Winsock.Bind;
  CloseSocket := Winsock.CloseSocket;
  Connect := Winsock.Connect;
  GetPeerName := Winsock.GetPeerName;
  GetSockName := Winsock.GetSockName;
  GetSockOpt := Winsock.GetSockOpt;
  Htonl := Winsock.htonl;
  Htons := Winsock.htons;
  Inet_Addr := Winsock.inet_addr;
  Inet_Ntoa := Winsock.inet_ntoa;
  IoctlSocket := Winsock.ioctlsocket;
  Listen := Winsock.listen;
  Ntohl := Winsock.ntohl;
  Ntohs := Winsock.ntohs;
  Recv := Winsock.recv;
  RecvFrom := Winsock.recvfrom;
  Select := Winsock.select;
  Send := Winsock.send;
  SendTo := Winsock.sendto;
  SetSockOpt := Winsock.setsockopt;
  ShutDown := Winsock.shutdown;
  Socket := Winsock.socket;
  GetHostByAddr := Winsock.GetHostByAddr;
  GetHostByName := Winsock.GetHostByName;
  GetProtoByName := Winsock.GetProtoByName;
  GetProtoByNumber := Winsock.GetProtoByNumber;
  GetServByName := Winsock.GetServByName;
  GetServByPort := Winsock.GetServByPort;
  GetHostName := Winsock.GetHostName;
  WSAGetLastError := Winsock.WSAGetLastError;
  WSAStartup := Winsock.WSAStartup;
  WSACleanup := Winsock.WSACleanup;
  Result := True;
{$ELSE}
  Result := False;
  if stack = '' then
    stack := DLLStackName;
  SynSockCS.Enter;
  try
    if SynSockCount = 0 then
    begin
      LibHandle := Windows.LoadLibrary(PChar(Stack));
      if LibHandle <> 0 then
      begin
        Accept := Windows.GetProcAddress(LibHandle, PChar('accept'));
        Bind := Windows.GetProcAddress(LibHandle, PChar('bind'));
        CloseSocket := Windows.GetProcAddress(LibHandle, PChar('closesocket'));
        Connect := Windows.GetProcAddress(LibHandle, PChar('connect'));
        GetPeerName := Windows.GetProcAddress(LibHandle, PChar('getpeername'));
        GetSockName := Windows.GetProcAddress(LibHandle, PChar('getsockname'));
        GetSockOpt := Windows.GetProcAddress(LibHandle, PChar('getsockopt'));
        Htonl := Windows.GetProcAddress(LibHandle, PChar('htonl'));
        Htons := Windows.GetProcAddress(LibHandle, PChar('htons'));
        Inet_Addr := Windows.GetProcAddress(LibHandle, PChar('inet_addr'));
        Inet_Ntoa := Windows.GetProcAddress(LibHandle, PChar('inet_ntoa'));
        IoctlSocket := Windows.GetProcAddress(LibHandle, PChar('ioctlsocket'));
        Listen := Windows.GetProcAddress(LibHandle, PChar('listen'));
        Ntohl := Windows.GetProcAddress(LibHandle, PChar('ntohl'));
        Ntohs := Windows.GetProcAddress(LibHandle, PChar('ntohs'));
        Recv := Windows.GetProcAddress(LibHandle, PChar('recv'));
        RecvFrom := Windows.GetProcAddress(LibHandle, PChar('recvfrom'));
        Select := Windows.GetProcAddress(LibHandle, PChar('select'));
        Send := Windows.GetProcAddress(LibHandle, PChar('send'));
        SendTo := Windows.GetProcAddress(LibHandle, PChar('sendto'));
        SetSockOpt := Windows.GetProcAddress(LibHandle, PChar('setsockopt'));
        ShutDown := Windows.GetProcAddress(LibHandle, PChar('shutdown'));
        Socket := Windows.GetProcAddress(LibHandle, PChar('socket'));
        GetHostByAddr := Windows.GetProcAddress(LibHandle, PChar('gethostbyaddr'));
        GetHostByName := Windows.GetProcAddress(LibHandle, PChar('gethostbyname'));
        GetProtoByName := Windows.GetProcAddress(LibHandle, PChar('getprotobyname'));
        GetProtoByNumber := Windows.GetProcAddress(LibHandle, PChar('getprotobynumber'));
        GetServByName := Windows.GetProcAddress(LibHandle, PChar('getservbyname'));
        GetServByPort := Windows.GetProcAddress(LibHandle, PChar('getservbyport'));
        GetHostName := Windows.GetProcAddress(LibHandle, PChar('gethostname'));
        WSAGetLastError := Windows.GetProcAddress(LibHandle, PChar('WSAGetLastError'));
        WSAStartup := Windows.GetProcAddress(LibHandle, PChar('WSAStartup'));
        WSACleanup := Windows.GetProcAddress(LibHandle, PChar('WSACleanup'));
        Result := True;
      end;
    end
    else Result := True;
    if Result then
      Inc(SynSockCount);
  finally
    SynSockCS.Leave;
  end;
{$ENDIF}
{$ENDIF}
end;

function DestroySocketInterface: Boolean;
begin
{$IFDEF LINUX}
{$ELSE}
{$IFNDEF STATICWINSOCK}
  SynSockCS.Enter;
  try
    Dec(SynSockCount);
    if SynSockCount < 0 then
      SynSockCount := 0;
    if SynSockCount = 0 then
      if LibHandle <> 0 then
      begin
        Windows.FreeLibrary(libHandle);
        LibHandle := 0;
      end;
  finally
    SynSockCS.Leave;
  end;
{$ENDIF}
{$ENDIF}
  Result := True;
end;

{$IFNDEF LINUX}
{$IFNDEF STATICWINSOCK}
initialization
begin
  SynSockCS:= TCriticalSection.Create;
end;

finalization
begin
  SynSockCS.Free;
end;
{$ENDIF}
{$ENDIF}

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -