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-- As a special exception under Section 7 of GPL version 3, you are granted -- 19-- additional permissions described in the GCC Runtime Library Exception, -- 20-- version 3.1, as published by the Free Software Foundation. -- 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 38with Interfaces.C; 39 40with GNAT.OS_Lib; 41with GNAT.Sockets.Thin_Common; 42 43with System; 44with System.CRTL; 45 46package 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 241private 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 259end GNAT.Sockets.Thin; 260