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 version is for NT 37 38with Interfaces.C.Strings; 39 40with GNAT.Sockets.Thin_Common; 41 42with System; 43with System.CRTL; 44 45package 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 C.Strings.chars_ptr; 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 70 (H_Errno : Integer) return C.Strings.chars_ptr; 71 -- Returns the error message string for the host error number H_Errno. 72 -- If H_Errno is not known, returns "Unknown system error". 73 74 end Host_Error_Messages; 75 76 -------------------------------- 77 -- Standard library functions -- 78 -------------------------------- 79 80 function C_Accept 81 (S : C.int; 82 Addr : System.Address; 83 Addrlen : not null access C.int) return C.int; 84 85 function C_Bind 86 (S : C.int; 87 Name : System.Address; 88 Namelen : C.int) return C.int; 89 90 function C_Close 91 (Fd : C.int) return C.int; 92 93 function C_Connect 94 (S : C.int; 95 Name : System.Address; 96 Namelen : C.int) return C.int; 97 98 function C_Gethostname 99 (Name : System.Address; 100 Namelen : C.int) return C.int; 101 102 function C_Getpeername 103 (S : C.int; 104 Name : System.Address; 105 Namelen : not null access C.int) return C.int; 106 107 function C_Getsockname 108 (S : C.int; 109 Name : System.Address; 110 Namelen : not null access C.int) return C.int; 111 112 function C_Getsockopt 113 (S : C.int; 114 Level : C.int; 115 Optname : C.int; 116 Optval : System.Address; 117 Optlen : not null access C.int) return C.int; 118 119 function Socket_Ioctl 120 (S : C.int; 121 Req : SOSC.IOCTL_Req_T; 122 Arg : access C.int) return C.int; 123 124 function C_Listen 125 (S : C.int; 126 Backlog : C.int) return C.int; 127 128 function C_Recv 129 (S : C.int; 130 Msg : System.Address; 131 Len : C.int; 132 Flags : C.int) return C.int; 133 134 function C_Recvfrom 135 (S : C.int; 136 Msg : System.Address; 137 Len : C.int; 138 Flags : C.int; 139 From : System.Address; 140 Fromlen : not null access C.int) return C.int; 141 142 function C_Recvmsg 143 (S : C.int; 144 Msg : System.Address; 145 Flags : C.int) return System.CRTL.ssize_t; 146 147 function C_Select 148 (Nfds : C.int; 149 Readfds : access Fd_Set; 150 Writefds : access Fd_Set; 151 Exceptfds : access Fd_Set; 152 Timeout : Timeval_Access) return C.int; 153 154 function C_Sendmsg 155 (S : C.int; 156 Msg : System.Address; 157 Flags : C.int) return System.CRTL.ssize_t; 158 159 function C_Sendto 160 (S : C.int; 161 Msg : System.Address; 162 Len : C.int; 163 Flags : C.int; 164 To : System.Address; 165 Tolen : C.int) return C.int; 166 167 function C_Setsockopt 168 (S : C.int; 169 Level : C.int; 170 Optname : C.int; 171 Optval : System.Address; 172 Optlen : C.int) return C.int; 173 174 function C_Shutdown 175 (S : C.int; 176 How : C.int) return C.int; 177 178 function C_Socket 179 (Domain : C.int; 180 Typ : C.int; 181 Protocol : C.int) return C.int; 182 183 function C_System 184 (Command : System.Address) return C.int; 185 186 function WSAStartup 187 (WS_Version : Interfaces.C.unsigned_short; 188 WSADataAddress : System.Address) return Interfaces.C.int; 189 190 ------------------------------------------------------- 191 -- Signalling file descriptors for selector abortion -- 192 ------------------------------------------------------- 193 194 package Signalling_Fds is 195 196 function Create (Fds : not null access Fd_Pair) return C.int; 197 pragma Convention (C, Create); 198 -- Create a pair of connected descriptors suitable for use with C_Select 199 -- (used for signalling in Selector objects). 200 201 function Read (Rsig : C.int) return C.int; 202 pragma Convention (C, Read); 203 -- Read one byte of data from rsig, the read end of a pair of signalling 204 -- fds created by Create_Signalling_Fds. 205 206 function Write (Wsig : C.int) return C.int; 207 pragma Convention (C, Write); 208 -- Write one byte of data to wsig, the write end of a pair of signalling 209 -- fds created by Create_Signalling_Fds. 210 211 procedure Close (Sig : C.int); 212 pragma Convention (C, Close); 213 -- Close one end of a pair of signalling fds (ignoring any error) 214 215 end Signalling_Fds; 216 217 procedure WSACleanup; 218 219 procedure Initialize; 220 procedure Finalize; 221 222private 223 pragma Import (Stdcall, C_Accept, "accept"); 224 pragma Import (Stdcall, C_Bind, "bind"); 225 pragma Import (Stdcall, C_Close, "closesocket"); 226 pragma Import (Stdcall, C_Gethostname, "gethostname"); 227 pragma Import (Stdcall, C_Getpeername, "getpeername"); 228 pragma Import (Stdcall, C_Getsockname, "getsockname"); 229 pragma Import (Stdcall, C_Getsockopt, "getsockopt"); 230 pragma Import (Stdcall, C_Listen, "listen"); 231 pragma Import (Stdcall, C_Recv, "recv"); 232 pragma Import (Stdcall, C_Recvfrom, "recvfrom"); 233 pragma Import (Stdcall, C_Sendto, "sendto"); 234 pragma Import (Stdcall, C_Setsockopt, "setsockopt"); 235 pragma Import (Stdcall, C_Shutdown, "shutdown"); 236 pragma Import (Stdcall, C_Socket, "socket"); 237 pragma Import (C, C_System, "_system"); 238 pragma Import (Stdcall, Socket_Errno, "WSAGetLastError"); 239 pragma Import (Stdcall, Set_Socket_Errno, "WSASetLastError"); 240 pragma Import (Stdcall, WSAStartup, "WSAStartup"); 241 pragma Import (Stdcall, WSACleanup, "WSACleanup"); 242 243end GNAT.Sockets.Thin; 244