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