File : g-socthi-mingw.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --                    G N A T . S O C K E T S . T H I N                     --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --                     Copyright (C) 2001-2013, AdaCore                     --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  22 -- You should have received a copy of the GNU General Public License and    --
  23 -- a copy of the GCC Runtime Library Exception along with this program;     --
  24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  25 -- <http://www.gnu.org/licenses/>.                                          --
  26 --                                                                          --
  27 -- GNAT was originally developed  by the GNAT team at  New York University. --
  28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  29 --                                                                          --
  30 ------------------------------------------------------------------------------
  31 
  32 --  This package provides a target dependent thin interface to the sockets
  33 --  layer for use by the GNAT.Sockets package (g-socket.ads). This package
  34 --  should not be directly with'ed by an applications program.
  35 
  36 --  This version is for NT
  37 
  38 with Interfaces.C;
  39 
  40 with GNAT.Sockets.Thin_Common;
  41 
  42 with System;
  43 with System.CRTL;
  44 
  45 package GNAT.Sockets.Thin is
  46 
  47    use Thin_Common;
  48 
  49    package C renames Interfaces.C;
  50 
  51    use type System.CRTL.ssize_t;
  52 
  53    function Socket_Errno return Integer;
  54    --  Returns last socket error number
  55 
  56    procedure Set_Socket_Errno (Errno : Integer);
  57    --  Set last socket error number
  58 
  59    function Socket_Error_Message (Errno : Integer) return String;
  60    --  Returns the error message string for the error number Errno. If Errno is
  61    --  not known, returns "Unknown system error".
  62 
  63    function Host_Errno return Integer;
  64    pragma Import (C, Host_Errno, "__gnat_get_h_errno");
  65    --  Returns last host error number
  66 
  67    package Host_Error_Messages is
  68 
  69       function Host_Error_Message (H_Errno : Integer) return String;
  70       --  Returns the error message string for the host error number H_Errno.
  71       --  If H_Errno is not known, returns "Unknown system error".
  72 
  73    end Host_Error_Messages;
  74 
  75    --------------------------------
  76    -- Standard library functions --
  77    --------------------------------
  78 
  79    function C_Accept
  80      (S       : C.int;
  81       Addr    : System.Address;
  82       Addrlen : not null access C.int) return C.int;
  83 
  84    function C_Bind
  85      (S       : C.int;
  86       Name    : System.Address;
  87       Namelen : C.int) return C.int;
  88 
  89    function C_Close
  90      (Fd : C.int) return C.int;
  91 
  92    function C_Connect
  93      (S       : C.int;
  94       Name    : System.Address;
  95       Namelen : C.int) return C.int;
  96 
  97    function C_Gethostname
  98      (Name    : System.Address;
  99       Namelen : C.int) return C.int;
 100 
 101    function C_Getpeername
 102      (S       : C.int;
 103       Name    : System.Address;
 104       Namelen : not null access C.int) return C.int;
 105 
 106    function C_Getsockname
 107      (S       : C.int;
 108       Name    : System.Address;
 109       Namelen : not null access C.int) return C.int;
 110 
 111    function C_Getsockopt
 112      (S       : C.int;
 113       Level   : C.int;
 114       Optname : C.int;
 115       Optval  : System.Address;
 116       Optlen  : not null access C.int) return C.int;
 117 
 118    function Socket_Ioctl
 119      (S   : C.int;
 120       Req : SOSC.IOCTL_Req_T;
 121       Arg : access C.int) return C.int;
 122 
 123    function C_Listen
 124      (S       : C.int;
 125       Backlog : C.int) return C.int;
 126 
 127    function C_Recv
 128      (S     : C.int;
 129       Msg   : System.Address;
 130       Len   : C.int;
 131       Flags : C.int) return C.int;
 132 
 133    function C_Recvfrom
 134      (S       : C.int;
 135       Msg     : System.Address;
 136       Len     : C.int;
 137       Flags   : C.int;
 138       From    : System.Address;
 139       Fromlen : not null access C.int) return C.int;
 140 
 141    function C_Recvmsg
 142      (S     : C.int;
 143       Msg   : System.Address;
 144       Flags : C.int) return System.CRTL.ssize_t;
 145 
 146    function C_Select
 147      (Nfds      : C.int;
 148       Readfds   : access Fd_Set;
 149       Writefds  : access Fd_Set;
 150       Exceptfds : access Fd_Set;
 151       Timeout   : Timeval_Access) return C.int;
 152 
 153    function C_Sendmsg
 154      (S     : C.int;
 155       Msg   : System.Address;
 156       Flags : C.int) return System.CRTL.ssize_t;
 157 
 158    function C_Sendto
 159      (S     : C.int;
 160       Msg   : System.Address;
 161       Len   : C.int;
 162       Flags : C.int;
 163       To    : System.Address;
 164       Tolen : C.int) return C.int;
 165 
 166    function C_Setsockopt
 167      (S       : C.int;
 168       Level   : C.int;
 169       Optname : C.int;
 170       Optval  : System.Address;
 171       Optlen  : C.int) return C.int;
 172 
 173    function C_Shutdown
 174      (S   : C.int;
 175       How : C.int) return C.int;
 176 
 177    function C_Socket
 178      (Domain   : C.int;
 179       Typ      : C.int;
 180       Protocol : C.int) return C.int;
 181 
 182    function C_System
 183      (Command : System.Address) return C.int;
 184 
 185    function WSAStartup
 186      (WS_Version     : Interfaces.C.unsigned_short;
 187       WSADataAddress : System.Address) return Interfaces.C.int;
 188 
 189    -------------------------------------------------------
 190    -- Signalling file descriptors for selector abortion --
 191    -------------------------------------------------------
 192 
 193    package Signalling_Fds is
 194 
 195       function Create (Fds : not null access Fd_Pair) return C.int;
 196       pragma Convention (C, Create);
 197       --  Create a pair of connected descriptors suitable for use with C_Select
 198       --  (used for signalling in Selector objects).
 199 
 200       function Read (Rsig : C.int) return C.int;
 201       pragma Convention (C, Read);
 202       --  Read one byte of data from rsig, the read end of a pair of signalling
 203       --  fds created by Create_Signalling_Fds.
 204 
 205       function Write (Wsig : C.int) return C.int;
 206       pragma Convention (C, Write);
 207       --  Write one byte of data to wsig, the write end of a pair of signalling
 208       --  fds created by Create_Signalling_Fds.
 209 
 210       procedure Close (Sig : C.int);
 211       pragma Convention (C, Close);
 212       --  Close one end of a pair of signalling fds (ignoring any error)
 213 
 214    end Signalling_Fds;
 215 
 216    procedure WSACleanup;
 217 
 218    procedure Initialize;
 219    procedure Finalize;
 220 
 221 private
 222    pragma Import (Stdcall, C_Accept, "accept");
 223    pragma Import (Stdcall, C_Bind, "bind");
 224    pragma Import (Stdcall, C_Close, "closesocket");
 225    pragma Import (Stdcall, C_Gethostname, "gethostname");
 226    pragma Import (Stdcall, C_Getpeername, "getpeername");
 227    pragma Import (Stdcall, C_Getsockname, "getsockname");
 228    pragma Import (Stdcall, C_Getsockopt, "getsockopt");
 229    pragma Import (Stdcall, C_Listen, "listen");
 230    pragma Import (Stdcall, C_Recv, "recv");
 231    pragma Import (Stdcall, C_Recvfrom, "recvfrom");
 232    pragma Import (Stdcall, C_Sendto, "sendto");
 233    pragma Import (Stdcall, C_Setsockopt, "setsockopt");
 234    pragma Import (Stdcall, C_Shutdown, "shutdown");
 235    pragma Import (Stdcall, C_Socket, "socket");
 236    pragma Import (C, C_System, "_system");
 237    pragma Import (Stdcall, Socket_Errno, "WSAGetLastError");
 238    pragma Import (Stdcall, Set_Socket_Errno, "WSASetLastError");
 239    pragma Import (Stdcall, WSAStartup, "WSAStartup");
 240    pragma Import (Stdcall, WSACleanup, "WSACleanup");
 241 
 242 end GNAT.Sockets.Thin;