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