File : g-socthi.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 is the default version
  37 
  38 with Interfaces.C;
  39 
  40 with GNAT.OS_Lib;
  41 with GNAT.Sockets.Thin_Common;
  42 
  43 with System;
  44 with System.CRTL;
  45 
  46 package GNAT.Sockets.Thin is
  47 
  48    --  This package is intended for hosts implementing BSD sockets with a
  49    --  standard interface. It will be used as a default for all the platforms
  50    --  that do not have a specific version of this file.
  51 
  52    use Thin_Common;
  53 
  54    package C renames Interfaces.C;
  55 
  56    use type System.CRTL.ssize_t;
  57 
  58    function Socket_Errno return Integer renames GNAT.OS_Lib.Errno;
  59    --  Returns last socket error number
  60 
  61    function Socket_Error_Message (Errno : Integer) return String;
  62    --  Returns the error message string for the error number Errno. If Errno is
  63    --  not known, returns "Unknown system error".
  64 
  65    function Host_Errno return Integer;
  66    pragma Import (C, Host_Errno, "__gnat_get_h_errno");
  67    --  Returns last host error number
  68 
  69    package Host_Error_Messages is
  70 
  71       function Host_Error_Message (H_Errno : Integer) return String;
  72       --  Returns the error message string for the host error number H_Errno.
  73       --  If H_Errno is not known, returns "Unknown system error".
  74 
  75    end Host_Error_Messages;
  76 
  77    --------------------------------
  78    -- Standard library functions --
  79    --------------------------------
  80 
  81    function C_Accept
  82      (S       : C.int;
  83       Addr    : System.Address;
  84       Addrlen : not null access C.int) return C.int;
  85 
  86    function C_Bind
  87      (S       : C.int;
  88       Name    : System.Address;
  89       Namelen : C.int) return C.int;
  90 
  91    function C_Close
  92      (Fd : C.int) return C.int;
  93 
  94    function C_Connect
  95      (S       : C.int;
  96       Name    : System.Address;
  97       Namelen : C.int) return C.int;
  98 
  99    function C_Gethostname
 100      (Name    : System.Address;
 101       Namelen : C.int) return C.int;
 102 
 103    function C_Getpeername
 104      (S       : C.int;
 105       Name    : System.Address;
 106       Namelen : not null access C.int) return C.int;
 107 
 108    function C_Getsockname
 109      (S       : C.int;
 110       Name    : System.Address;
 111       Namelen : not null access C.int) return C.int;
 112 
 113    function C_Getsockopt
 114      (S       : C.int;
 115       Level   : C.int;
 116       Optname : C.int;
 117       Optval  : System.Address;
 118       Optlen  : not null access C.int) return C.int;
 119 
 120    function Socket_Ioctl
 121      (S   : C.int;
 122       Req : SOSC.IOCTL_Req_T;
 123       Arg : access C.int) return C.int;
 124 
 125    function C_Listen
 126      (S       : C.int;
 127       Backlog : C.int) return C.int;
 128 
 129    function C_Recv
 130      (S     : C.int;
 131       Msg   : System.Address;
 132       Len   : C.int;
 133       Flags : C.int) return C.int;
 134 
 135    function C_Recvfrom
 136      (S       : C.int;
 137       Msg     : System.Address;
 138       Len     : C.int;
 139       Flags   : C.int;
 140       From    : System.Address;
 141       Fromlen : not null access C.int) return C.int;
 142 
 143    function C_Recvmsg
 144      (S     : C.int;
 145       Msg   : System.Address;
 146       Flags : C.int) return System.CRTL.ssize_t;
 147 
 148    function C_Select
 149      (Nfds      : C.int;
 150       Readfds   : access Fd_Set;
 151       Writefds  : access Fd_Set;
 152       Exceptfds : access Fd_Set;
 153       Timeout   : Timeval_Access) return C.int;
 154 
 155    function C_Sendmsg
 156      (S     : C.int;
 157       Msg   : System.Address;
 158       Flags : C.int) return System.CRTL.ssize_t;
 159 
 160    function C_Sendto
 161      (S     : C.int;
 162       Msg   : System.Address;
 163       Len   : C.int;
 164       Flags : C.int;
 165       To    : System.Address;
 166       Tolen : C.int) return C.int;
 167 
 168    function C_Setsockopt
 169      (S       : C.int;
 170       Level   : C.int;
 171       Optname : C.int;
 172       Optval  : System.Address;
 173       Optlen  : C.int) return C.int;
 174 
 175    function C_Shutdown
 176      (S   : C.int;
 177       How : C.int) return C.int;
 178 
 179    function C_Socket
 180      (Domain   : C.int;
 181       Typ      : C.int;
 182       Protocol : C.int) return C.int;
 183 
 184    function C_System
 185      (Command : System.Address) return C.int;
 186 
 187    -------------------------------------------------------
 188    -- Signalling file descriptors for selector abortion --
 189    -------------------------------------------------------
 190 
 191    package Signalling_Fds is
 192 
 193       function Create (Fds : not null access Fd_Pair) return C.int;
 194       pragma Convention (C, Create);
 195       --  Create a pair of connected descriptors suitable for use with C_Select
 196       --  (used for signalling in Selector objects).
 197 
 198       function Read (Rsig : C.int) return C.int;
 199       pragma Convention (C, Read);
 200       --  Read one byte of data from rsig, the read end of a pair of signalling
 201       --  fds created by Create_Signalling_Fds.
 202 
 203       function Write (Wsig : C.int) return C.int;
 204       pragma Convention (C, Write);
 205       --  Write one byte of data to wsig, the write end of a pair of signalling
 206       --  fds created by Create_Signalling_Fds.
 207 
 208       procedure Close (Sig : C.int);
 209       pragma Convention (C, Close);
 210       --  Close one end of a pair of signalling fds (ignoring any error)
 211 
 212    end Signalling_Fds;
 213 
 214    -------------------------------------------
 215    -- Nonreentrant network databases access --
 216    -------------------------------------------
 217 
 218    --  The following are used only on systems that have nonreentrant
 219    --  getXXXbyYYY functions, and do NOT have corresponding getXXXbyYYY_
 220    --  functions. Currently, LynxOS is the only such system.
 221 
 222    function Nonreentrant_Gethostbyname
 223      (Name : C.char_array) return Hostent_Access;
 224 
 225    function Nonreentrant_Gethostbyaddr
 226      (Addr      : System.Address;
 227       Addr_Len  : C.int;
 228       Addr_Type : C.int) return Hostent_Access;
 229 
 230    function Nonreentrant_Getservbyname
 231      (Name  : C.char_array;
 232       Proto : C.char_array) return Servent_Access;
 233 
 234    function Nonreentrant_Getservbyport
 235      (Port  : C.int;
 236       Proto : C.char_array) return Servent_Access;
 237 
 238    procedure Initialize;
 239    procedure Finalize;
 240 
 241 private
 242    pragma Import (C, C_Bind, "bind");
 243    pragma Import (C, C_Close, "close");
 244    pragma Import (C, C_Gethostname, "gethostname");
 245    pragma Import (C, C_Getpeername, "getpeername");
 246    pragma Import (C, C_Getsockname, "getsockname");
 247    pragma Import (C, C_Getsockopt, "getsockopt");
 248    pragma Import (C, C_Listen, "listen");
 249    pragma Import (C, C_Select, "select");
 250    pragma Import (C, C_Setsockopt, "setsockopt");
 251    pragma Import (C, C_Shutdown, "shutdown");
 252    pragma Import (C, C_System, "system");
 253 
 254    pragma Import (C, Nonreentrant_Gethostbyname, "gethostbyname");
 255    pragma Import (C, Nonreentrant_Gethostbyaddr, "gethostbyaddr");
 256    pragma Import (C, Nonreentrant_Getservbyname, "getservbyname");
 257    pragma Import (C, Nonreentrant_Getservbyport, "getservbyport");
 258 
 259 end GNAT.Sockets.Thin;