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) 2002-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 Alpha/VMS 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 -- ??? more comments needed ??? 49 50 use Thin_Common; 51 52 package C renames Interfaces.C; 53 54 use type System.CRTL.ssize_t; 55 56 function Socket_Errno return Integer renames GNAT.OS_Lib.Errno; 57 -- Returns last socket error number 58 59 procedure Set_Socket_Errno (Errno : Integer) renames GNAT.OS_Lib.Set_Errno; 60 -- Set last socket error number 61 62 function Socket_Error_Message (Errno : Integer) return C.Strings.chars_ptr; 63 -- Returns the error message string for the error number Errno. If Errno is 64 -- not known, returns "Unknown system error". 65 66 function Host_Errno return Integer; 67 pragma Import (C, Host_Errno, "__gnat_get_h_errno"); 68 -- Returns last host error number 69 70 package Host_Error_Messages is 71 72 function Host_Error_Message 73 (H_Errno : Integer) return C.Strings.chars_ptr; 74 -- Returns the error message string for the host error number H_Errno. 75 -- If H_Errno is not known, returns "Unknown system error". 76 77 end Host_Error_Messages; 78 79 -------------------------------- 80 -- Standard library functions -- 81 -------------------------------- 82 83 function C_Accept 84 (S : C.int; 85 Addr : System.Address; 86 Addrlen : not null access C.int) return C.int; 87 88 function C_Bind 89 (S : C.int; 90 Name : System.Address; 91 Namelen : C.int) return C.int; 92 93 function C_Close 94 (Fd : C.int) return C.int; 95 96 function C_Connect 97 (S : C.int; 98 Name : System.Address; 99 Namelen : C.int) return C.int; 100 101 function C_Gethostname 102 (Name : System.Address; 103 Namelen : C.int) return C.int; 104 105 function C_Getpeername 106 (S : C.int; 107 Name : System.Address; 108 Namelen : not null access C.int) return C.int; 109 110 function C_Getsockname 111 (S : C.int; 112 Name : System.Address; 113 Namelen : not null access C.int) return C.int; 114 115 function C_Getsockopt 116 (S : C.int; 117 Level : C.int; 118 Optname : C.int; 119 Optval : System.Address; 120 Optlen : not null access C.int) return C.int; 121 122 function Socket_Ioctl 123 (S : C.int; 124 Req : SOSC.IOCTL_Req_T; 125 Arg : access C.int) return C.int; 126 127 function C_Listen 128 (S : C.int; 129 Backlog : C.int) return C.int; 130 131 function C_Recv 132 (S : C.int; 133 Msg : System.Address; 134 Len : C.int; 135 Flags : C.int) return C.int; 136 137 function C_Recvfrom 138 (S : C.int; 139 Msg : System.Address; 140 Len : C.int; 141 Flags : C.int; 142 From : System.Address; 143 Fromlen : not null access C.int) return C.int; 144 145 function C_Recvmsg 146 (S : C.int; 147 Msg : System.Address; 148 Flags : C.int) return System.CRTL.ssize_t; 149 150 function C_Select 151 (Nfds : C.int; 152 Readfds : access Fd_Set; 153 Writefds : access Fd_Set; 154 Exceptfds : access Fd_Set; 155 Timeout : Timeval_Access) return C.int; 156 157 function C_Sendmsg 158 (S : C.int; 159 Msg : System.Address; 160 Flags : C.int) return System.CRTL.ssize_t; 161 162 function C_Sendto 163 (S : C.int; 164 Msg : System.Address; 165 Len : C.int; 166 Flags : C.int; 167 To : System.Address; 168 Tolen : C.int) return C.int; 169 170 function C_Setsockopt 171 (S : C.int; 172 Level : C.int; 173 Optname : C.int; 174 Optval : System.Address; 175 Optlen : C.int) return C.int; 176 177 function C_Shutdown 178 (S : C.int; 179 How : C.int) return C.int; 180 181 function C_Socket 182 (Domain : C.int; 183 Typ : C.int; 184 Protocol : C.int) return C.int; 185 186 function C_System 187 (Command : System.Address) return 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 ------------------------------------------- 217 -- Nonreentrant network databases access -- 218 ------------------------------------------- 219 220 function Nonreentrant_Gethostbyname 221 (Name : C.char_array) return Hostent_Access; 222 223 function Nonreentrant_Gethostbyaddr 224 (Addr : System.Address; 225 Addr_Len : C.int; 226 Addr_Type : C.int) return Hostent_Access; 227 228 function Nonreentrant_Getservbyname 229 (Name : C.char_array; 230 Proto : C.char_array) return Servent_Access; 231 232 function Nonreentrant_Getservbyport 233 (Port : C.int; 234 Proto : C.char_array) return Servent_Access; 235 236 procedure Initialize; 237 procedure Finalize; 238 239private 240 241 pragma Import (C, C_Bind, "DECC$BIND"); 242 pragma Import (C, C_Close, "DECC$CLOSE"); 243 pragma Import (C, C_Gethostname, "DECC$GETHOSTNAME"); 244 pragma Import (C, C_Getpeername, "DECC$GETPEERNAME"); 245 pragma Import (C, C_Getsockname, "DECC$GETSOCKNAME"); 246 pragma Import (C, C_Getsockopt, "DECC$GETSOCKOPT"); 247 pragma Import (C, C_Listen, "DECC$LISTEN"); 248 pragma Import (C, C_Select, "DECC$SELECT"); 249 pragma Import (C, C_Setsockopt, "DECC$SETSOCKOPT"); 250 pragma Import (C, C_Shutdown, "DECC$SHUTDOWN"); 251 pragma Import (C, C_System, "DECC$SYSTEM"); 252 253 pragma Import (C, Nonreentrant_Gethostbyname, "DECC$GETHOSTBYNAME"); 254 pragma Import (C, Nonreentrant_Gethostbyaddr, "DECC$GETHOSTBYADDR"); 255 pragma Import (C, Nonreentrant_Getservbyname, "DECC$GETSERVBYNAME"); 256 pragma Import (C, Nonreentrant_Getservbyport, "DECC$GETSERVBYPORT"); 257 258end GNAT.Sockets.Thin; 259