]>
Commit | Line | Data |
---|---|---|
fbf5a39b AC |
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 | -- -- | |
4b490c1e | 9 | -- Copyright (C) 2002-2020, AdaCore -- |
fbf5a39b AC |
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- -- | |
607d0635 | 13 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
fbf5a39b AC |
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 -- | |
607d0635 AC |
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/>. -- | |
fbf5a39b AC |
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 | ||
47752af2 | 38 | with Interfaces.C; |
fbf5a39b | 39 | |
fbf5a39b | 40 | with GNAT.OS_Lib; |
1b686dc4 | 41 | with GNAT.Sockets.Thin_Common; |
fbf5a39b AC |
42 | |
43 | with System; | |
b29def53 | 44 | with System.CRTL; |
fbf5a39b AC |
45 | |
46 | package GNAT.Sockets.Thin is | |
47 | ||
1b686dc4 | 48 | use Thin_Common; |
fbf5a39b | 49 | |
1b686dc4 | 50 | package C renames Interfaces.C; |
fbf5a39b AC |
51 | |
52 | function Socket_Errno return Integer renames GNAT.OS_Lib.Errno; | |
a2cb348e | 53 | -- Returns last socket error number |
fbf5a39b | 54 | |
3d3bf932 TQ |
55 | procedure Set_Socket_Errno (Errno : Integer) renames GNAT.OS_Lib.Set_Errno; |
56 | -- Set last socket error number | |
57 | ||
3e5b1f32 | 58 | function Socket_Error_Message (Errno : Integer) return String; |
a2cb348e | 59 | -- Returns the error message string for the error number Errno. If Errno is |
47a5501d | 60 | -- not known, returns "Unknown system error". |
fbf5a39b | 61 | |
3e1fd98f TQ |
62 | function Host_Errno return Integer; |
63 | pragma Import (C, Host_Errno, "__gnat_get_h_errno"); | |
64 | -- Returns last host error number | |
65 | ||
47a5501d TQ |
66 | package Host_Error_Messages is |
67 | ||
47752af2 | 68 | function Host_Error_Message (H_Errno : Integer) return String; |
47a5501d TQ |
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 | ||
47a5501d TQ |
74 | -------------------------------- |
75 | -- Standard library functions -- | |
76 | -------------------------------- | |
77 | ||
fbf5a39b AC |
78 | function C_Accept |
79 | (S : C.int; | |
80 | Addr : System.Address; | |
3d3bf932 | 81 | Addrlen : not null access C.int) return C.int; |
fbf5a39b AC |
82 | |
83 | function C_Bind | |
84 | (S : C.int; | |
85 | Name : System.Address; | |
3e1fd98f | 86 | Namelen : C.int) return C.int; |
fbf5a39b AC |
87 | |
88 | function C_Close | |
3e1fd98f | 89 | (Fd : C.int) return C.int; |
fbf5a39b AC |
90 | |
91 | function C_Connect | |
92 | (S : C.int; | |
93 | Name : System.Address; | |
3e1fd98f | 94 | Namelen : C.int) return C.int; |
fbf5a39b | 95 | |
fbf5a39b AC |
96 | function C_Gethostname |
97 | (Name : System.Address; | |
3e1fd98f | 98 | Namelen : C.int) return C.int; |
fbf5a39b AC |
99 | |
100 | function C_Getpeername | |
101 | (S : C.int; | |
102 | Name : System.Address; | |
3d3bf932 | 103 | Namelen : not null access C.int) return C.int; |
fbf5a39b | 104 | |
fbf5a39b AC |
105 | function C_Getsockname |
106 | (S : C.int; | |
107 | Name : System.Address; | |
3d3bf932 | 108 | Namelen : not null access C.int) return C.int; |
fbf5a39b AC |
109 | |
110 | function C_Getsockopt | |
111 | (S : C.int; | |
112 | Level : C.int; | |
113 | Optname : C.int; | |
114 | Optval : System.Address; | |
3d3bf932 | 115 | Optlen : not null access C.int) return C.int; |
fbf5a39b | 116 | |
f26d5cd3 AC |
117 | function Socket_Ioctl |
118 | (S : C.int; | |
6db566c3 | 119 | Req : SOSC.IOCTL_Req_T; |
f26d5cd3 | 120 | Arg : access C.int) return C.int; |
fbf5a39b | 121 | |
3d3bf932 TQ |
122 | function C_Listen |
123 | (S : C.int; | |
124 | Backlog : C.int) return C.int; | |
fbf5a39b | 125 | |
fbf5a39b AC |
126 | function C_Recv |
127 | (S : C.int; | |
128 | Msg : System.Address; | |
129 | Len : C.int; | |
3e1fd98f | 130 | Flags : C.int) return C.int; |
fbf5a39b AC |
131 | |
132 | function C_Recvfrom | |
133 | (S : C.int; | |
134 | Msg : System.Address; | |
135 | Len : C.int; | |
136 | Flags : C.int; | |
3743d5bd | 137 | From : System.Address; |
3d3bf932 | 138 | Fromlen : not null access C.int) return C.int; |
fbf5a39b | 139 | |
ac72c9c5 AC |
140 | function C_Recvmsg |
141 | (S : C.int; | |
142 | Msg : System.Address; | |
b29def53 | 143 | Flags : C.int) return System.CRTL.ssize_t; |
ac72c9c5 | 144 | |
fbf5a39b AC |
145 | function C_Select |
146 | (Nfds : C.int; | |
3dd9959c AC |
147 | Readfds : access Fd_Set; |
148 | Writefds : access Fd_Set; | |
149 | Exceptfds : access Fd_Set; | |
3e1fd98f | 150 | Timeout : Timeval_Access) return C.int; |
fbf5a39b | 151 | |
ac72c9c5 AC |
152 | function C_Sendmsg |
153 | (S : C.int; | |
154 | Msg : System.Address; | |
b29def53 | 155 | Flags : C.int) return System.CRTL.ssize_t; |
ac72c9c5 | 156 | |
fbf5a39b AC |
157 | function C_Sendto |
158 | (S : C.int; | |
159 | Msg : System.Address; | |
160 | Len : C.int; | |
161 | Flags : C.int; | |
3743d5bd | 162 | To : System.Address; |
3e1fd98f | 163 | Tolen : C.int) return C.int; |
fbf5a39b AC |
164 | |
165 | function C_Setsockopt | |
166 | (S : C.int; | |
167 | Level : C.int; | |
168 | Optname : C.int; | |
169 | Optval : System.Address; | |
3e1fd98f | 170 | Optlen : C.int) return C.int; |
fbf5a39b AC |
171 | |
172 | function C_Shutdown | |
3e1fd98f TQ |
173 | (S : C.int; |
174 | How : C.int) return C.int; | |
fbf5a39b AC |
175 | |
176 | function C_Socket | |
177 | (Domain : C.int; | |
178 | Typ : C.int; | |
3e1fd98f | 179 | Protocol : C.int) return C.int; |
fbf5a39b | 180 | |
fd0d7b4e DA |
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 | ||
fbf5a39b | 192 | function C_System |
3e1fd98f | 193 | (Command : System.Address) return C.int; |
fbf5a39b | 194 | |
47a5501d TQ |
195 | ------------------------------------------------------- |
196 | -- Signalling file descriptors for selector abortion -- | |
197 | ------------------------------------------------------- | |
198 | ||
3d3bf932 TQ |
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 | ||
47a5501d TQ |
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 | ||
3d3bf932 TQ |
220 | end Signalling_Fds; |
221 | ||
47a5501d | 222 | procedure Initialize; |
fbf5a39b | 223 | procedure Finalize; |
fbf5a39b AC |
224 | |
225 | private | |
fbf5a39b AC |
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"); | |
fbf5a39b | 232 | pragma Import (C, C_Listen, "listen"); |
fbf5a39b AC |
233 | pragma Import (C, C_Select, "select"); |
234 | pragma Import (C, C_Setsockopt, "setsockopt"); | |
235 | pragma Import (C, C_Shutdown, "shutdown"); | |
fbf5a39b | 236 | pragma Import (C, C_System, "system"); |
fbf5a39b | 237 | end GNAT.Sockets.Thin; |