]> git.proxmox.com Git - rustc.git/blame - library/std/src/sys/solid/abi/sockets.rs
New upstream version 1.60.0+dfsg1
[rustc.git] / library / std / src / sys / solid / abi / sockets.rs
CommitLineData
c295e0f8
XL
1use crate::os::raw::{c_char, c_uint, c_void};
2pub use libc::{c_int, c_long, size_t, ssize_t, suseconds_t, time_t, timeval};
3
4pub const SOLID_NET_ERR_BASE: c_int = -2000;
5pub const EINPROGRESS: c_int = SOLID_NET_ERR_BASE - libc::EINPROGRESS;
6
7pub const AF_INET6: i32 = 10;
8pub const AF_INET: i32 = 2;
9pub const IPPROTO_IP: i32 = 0;
10pub const IPPROTO_IPV6: i32 = 41;
11pub const IPPROTO_TCP: i32 = 6;
12pub const IPV6_ADD_MEMBERSHIP: i32 = 12;
13pub const IPV6_DROP_MEMBERSHIP: i32 = 13;
14pub const IPV6_MULTICAST_LOOP: i32 = 19;
15pub const IPV6_V6ONLY: i32 = 27;
16pub const IP_TTL: i32 = 2;
17pub const IP_MULTICAST_TTL: i32 = 5;
18pub const IP_MULTICAST_LOOP: i32 = 7;
19pub const IP_ADD_MEMBERSHIP: i32 = 3;
20pub const IP_DROP_MEMBERSHIP: i32 = 4;
21pub const SHUT_RD: i32 = 0;
22pub const SHUT_RDWR: i32 = 2;
23pub const SHUT_WR: i32 = 1;
24pub const SOCK_DGRAM: i32 = 2;
25pub const SOCK_STREAM: i32 = 1;
26pub const SOL_SOCKET: i32 = 4095;
27pub const SO_BROADCAST: i32 = 32;
28pub const SO_ERROR: i32 = 4103;
29pub const SO_RCVTIMEO: i32 = 4102;
30pub const SO_REUSEADDR: i32 = 4;
31pub const SO_SNDTIMEO: i32 = 4101;
32pub const SO_LINGER: i32 = 128;
33pub const TCP_NODELAY: i32 = 1;
34pub const MSG_PEEK: c_int = 1;
35pub const FIONBIO: c_long = 0x8008667eu32 as c_long;
36pub const EAI_NONAME: i32 = -2200;
37pub const EAI_SERVICE: i32 = -2201;
38pub const EAI_FAIL: i32 = -2202;
39pub const EAI_MEMORY: i32 = -2203;
40pub const EAI_FAMILY: i32 = -2204;
41
42pub type sa_family_t = u8;
43pub type socklen_t = u32;
44pub type in_addr_t = u32;
45pub type in_port_t = u16;
46
47#[repr(C)]
48#[derive(Debug, Copy, Clone)]
49pub struct in_addr {
50 pub s_addr: in_addr_t,
51}
52
53#[repr(C)]
54#[derive(Debug, Copy, Clone)]
55pub struct in6_addr {
56 pub s6_addr: [u8; 16],
57}
58
59#[repr(C)]
60#[derive(Debug, Copy, Clone)]
61pub struct ip_mreq {
62 pub imr_multiaddr: in_addr,
63 pub imr_interface: in_addr,
64}
65
66#[repr(C)]
67#[derive(Debug, Copy, Clone)]
68pub struct ipv6_mreq {
69 pub ipv6mr_multiaddr: in6_addr,
70 pub ipv6mr_interface: c_uint,
71}
72
73#[repr(C)]
74#[derive(Debug, Copy, Clone)]
75pub struct msghdr {
76 pub msg_name: *mut c_void,
77 pub msg_namelen: socklen_t,
78 pub msg_iov: *mut iovec,
79 pub msg_iovlen: c_int,
80 pub msg_control: *mut c_void,
81 pub msg_controllen: socklen_t,
82 pub msg_flags: c_int,
83}
84
85#[repr(C)]
86#[derive(Debug, Copy, Clone)]
87pub struct sockaddr {
88 pub sa_len: u8,
89 pub sa_family: sa_family_t,
90 pub sa_data: [c_char; 14usize],
91}
92
93#[repr(C)]
94#[derive(Debug, Copy, Clone)]
95pub struct sockaddr_in {
96 pub sin_len: u8,
97 pub sin_family: sa_family_t,
98 pub sin_port: in_port_t,
99 pub sin_addr: in_addr,
100 pub sin_zero: [c_char; 8usize],
101}
102
103#[repr(C)]
104#[derive(Copy, Clone)]
105pub struct sockaddr_in6 {
106 pub sin6_len: u8,
107 pub sin6_family: sa_family_t,
108 pub sin6_port: in_port_t,
109 pub sin6_flowinfo: u32,
110 pub sin6_addr: in6_addr,
111 pub sin6_scope_id: u32,
112}
113
114#[repr(C)]
115#[derive(Debug, Copy, Clone)]
116pub struct sockaddr_storage {
117 pub s2_len: u8,
118 pub ss_family: sa_family_t,
119 pub s2_data1: [c_char; 2usize],
120 pub s2_data2: [u32; 3usize],
121}
122
123#[repr(C)]
124#[derive(Debug, Copy, Clone)]
125pub struct addrinfo {
126 pub ai_flags: c_int,
127 pub ai_family: c_int,
128 pub ai_socktype: c_int,
129 pub ai_protocol: c_int,
130 pub ai_addrlen: socklen_t,
131 pub ai_addr: *mut sockaddr,
132 pub ai_canonname: *mut c_char,
133 pub ai_next: *mut addrinfo,
134}
135
136#[repr(C)]
137#[derive(Debug, Copy, Clone)]
138pub struct linger {
139 pub l_onoff: c_int,
140 pub l_linger: c_int,
141}
142
143#[repr(C)]
144#[derive(Debug, Copy, Clone)]
145pub struct iovec {
146 pub iov_base: *mut c_void,
147 pub iov_len: usize,
148}
149
150/// This value can be chosen by an application
151pub const SOLID_NET_FD_SETSIZE: usize = 1;
152
153#[repr(C)]
154#[derive(Debug, Copy, Clone)]
155pub struct fd_set {
156 pub num_fds: usize,
157 pub fds: [c_int; SOLID_NET_FD_SETSIZE],
158}
159
160extern "C" {
161 #[link_name = "SOLID_NET_StrError"]
162 pub fn strerror(errnum: c_int) -> *const c_char;
163
164 pub fn SOLID_NET_GetLastError() -> c_int;
165
166 #[link_name = "SOLID_NET_Accept"]
167 pub fn accept(s: c_int, addr: *mut sockaddr, addrlen: *mut socklen_t) -> c_int;
168
169 #[link_name = "SOLID_NET_Bind"]
170 pub fn bind(s: c_int, name: *const sockaddr, namelen: socklen_t) -> c_int;
171
172 #[link_name = "SOLID_NET_Connect"]
173 pub fn connect(s: c_int, name: *const sockaddr, namelen: socklen_t) -> c_int;
174
175 #[link_name = "SOLID_NET_Close"]
176 pub fn close(s: c_int) -> c_int;
177
5099ac24
FG
178 #[link_name = "SOLID_NET_Dup"]
179 pub fn dup(s: c_int) -> c_int;
180
c295e0f8
XL
181 #[link_name = "SOLID_NET_GetPeerName"]
182 pub fn getpeername(s: c_int, name: *mut sockaddr, namelen: *mut socklen_t) -> c_int;
183
184 #[link_name = "SOLID_NET_GetSockName"]
185 pub fn getsockname(s: c_int, name: *mut sockaddr, namelen: *mut socklen_t) -> c_int;
186
187 #[link_name = "SOLID_NET_GetSockOpt"]
188 pub fn getsockopt(
189 s: c_int,
190 level: c_int,
191 optname: c_int,
192 optval: *mut c_void,
193 optlen: *mut socklen_t,
194 ) -> c_int;
195
196 #[link_name = "SOLID_NET_SetSockOpt"]
197 pub fn setsockopt(
198 s: c_int,
199 level: c_int,
200 optname: c_int,
201 optval: *const c_void,
202 optlen: socklen_t,
203 ) -> c_int;
204
205 #[link_name = "SOLID_NET_Ioctl"]
206 pub fn ioctl(s: c_int, cmd: c_long, argp: *mut c_void) -> c_int;
207
208 #[link_name = "SOLID_NET_Listen"]
209 pub fn listen(s: c_int, backlog: c_int) -> c_int;
210
211 #[link_name = "SOLID_NET_Recv"]
212 pub fn recv(s: c_int, mem: *mut c_void, len: size_t, flags: c_int) -> ssize_t;
213
214 #[link_name = "SOLID_NET_Read"]
215 pub fn read(s: c_int, mem: *mut c_void, len: size_t) -> ssize_t;
216
217 #[link_name = "SOLID_NET_Readv"]
218 pub fn readv(s: c_int, bufs: *const iovec, bufcnt: c_int) -> ssize_t;
219
220 #[link_name = "SOLID_NET_RecvFrom"]
221 pub fn recvfrom(
222 s: c_int,
223 mem: *mut c_void,
224 len: size_t,
225 flags: c_int,
226 from: *mut sockaddr,
227 fromlen: *mut socklen_t,
228 ) -> ssize_t;
229
230 #[link_name = "SOLID_NET_Send"]
231 pub fn send(s: c_int, mem: *const c_void, len: size_t, flags: c_int) -> ssize_t;
232
233 #[link_name = "SOLID_NET_SendMsg"]
234 pub fn sendmsg(s: c_int, message: *const msghdr, flags: c_int) -> ssize_t;
235
236 #[link_name = "SOLID_NET_SendTo"]
237 pub fn sendto(
238 s: c_int,
239 mem: *const c_void,
240 len: size_t,
241 flags: c_int,
242 to: *const sockaddr,
243 tolen: socklen_t,
244 ) -> ssize_t;
245
246 #[link_name = "SOLID_NET_Shutdown"]
247 pub fn shutdown(s: c_int, how: c_int) -> c_int;
248
249 #[link_name = "SOLID_NET_Socket"]
250 pub fn socket(domain: c_int, type_: c_int, protocol: c_int) -> c_int;
251
252 #[link_name = "SOLID_NET_Write"]
253 pub fn write(s: c_int, mem: *const c_void, len: size_t) -> ssize_t;
254
255 #[link_name = "SOLID_NET_Writev"]
256 pub fn writev(s: c_int, bufs: *const iovec, bufcnt: c_int) -> ssize_t;
257
258 #[link_name = "SOLID_NET_FreeAddrInfo"]
259 pub fn freeaddrinfo(ai: *mut addrinfo);
260
261 #[link_name = "SOLID_NET_GetAddrInfo"]
262 pub fn getaddrinfo(
263 nodename: *const c_char,
264 servname: *const c_char,
265 hints: *const addrinfo,
266 res: *mut *mut addrinfo,
267 ) -> c_int;
268
269 #[link_name = "SOLID_NET_Select"]
270 pub fn select(
271 maxfdp1: c_int,
272 readset: *mut fd_set,
273 writeset: *mut fd_set,
274 exceptset: *mut fd_set,
275 timeout: *mut timeval,
276 ) -> c_int;
277}