xref: /drstd/dlibc/src/unix/header/sys_socket/mod.rs (revision 0fe3ff0054d3aec7fbf9bddecfecb10bc7d23a51)
1 //! socket implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xns/syssocket.h.html
2 
3 use core::ptr;
4 use crate::unix::platform;
5 pub mod constants;
6 
7 use unix::platform::sockaddr;
8 
9 pub type sa_family_t = u16;
10 pub type socklen_t = u32;
11 
12 pub unsafe extern "C" fn accept(
13     socket: ::c_int,
14     address: *mut sockaddr,
15     address_len: *mut socklen_t,
16 ) -> ::c_int {
17     trace_expr!(
18         platform::pal::accept(socket, address, address_len),
19         "accept({}, {:p}, {:p})",
20         socket,
21         address,
22         address_len
23     )
24 }
25 
26 pub unsafe fn bind(
27     socket: ::c_int,
28     address: *const sockaddr,
29     address_len: socklen_t,
30 ) -> ::c_int {
31     trace_expr!(
32         platform::pal::bind(socket, address, address_len),
33         "bind({}, {:p}, {})",
34         socket,
35         address,
36         address_len
37     )
38 }
39 
40 // #[no_mangle]
41 // pub unsafe extern "C" fn connect(
42 //     socket: ::c_int,
43 //     address: *const sockaddr,
44 //     address_len: socklen_t,
45 // ) -> ::c_int {
46 //     trace_expr!(
47 //         platform::pal::connect(socket, address, address_len),
48 //         "connect({}, {:p}, {})",
49 //         socket,
50 //         address,
51 //         address_len
52 //     )
53 // }
54 
55 // #[no_mangle]
56 // pub unsafe extern "C" fn getpeername(
57 //     socket: ::c_int,
58 //     address: *mut sockaddr,
59 //     address_len: *mut socklen_t,
60 // ) -> ::c_int {
61 //     trace_expr!(
62 //         platform::pal::getpeername(socket, address, address_len),
63 //         "getpeername({}, {:p}, {:p})",
64 //         socket,
65 //         address,
66 //         address_len
67 //     )
68 // }
69 
70 // #[no_mangle]
71 // pub unsafe extern "C" fn getsockname(
72 //     socket: ::c_int,
73 //     address: *mut sockaddr,
74 //     address_len: *mut socklen_t,
75 // ) -> ::c_int {
76 //     trace_expr!(
77 //         platform::pal::getsockname(socket, address, address_len),
78 //         "getsockname({}, {:p}, {:p})",
79 //         socket,
80 //         address,
81 //         address_len
82 //     )
83 // }
84 
85 // #[no_mangle]
86 // pub unsafe extern "C" fn getsockopt(
87 //     socket: ::c_int,
88 //     level: ::c_int,
89 //     option_name: ::c_int,
90 //     option_value: *mut ::c_void,
91 //     option_len: *mut socklen_t,
92 // ) -> ::c_int {
93 //     trace_expr!(
94 //         platform::pal::getsockopt(socket, level, option_name, option_value, option_len),
95 //         "getsockopt({}, {}, {}, {:p}, {:p})",
96 //         socket,
97 //         level,
98 //         option_name,
99 //         option_value,
100 //         option_len
101 //     )
102 // }
103 
104 // #[no_mangle]
105 // pub unsafe extern "C" fn listen(socket: ::c_int, backlog: ::c_int) -> ::c_int {
106 //     platform::pal::listen(socket, backlog)
107 // }
108 
109 #[no_mangle]
110 pub unsafe extern "C" fn recv(
111     socket: ::c_int,
112     buffer: *mut ::c_void,
113     length: ::size_t,
114     flags: ::c_int,
115 ) -> ::ssize_t {
116     ::recvfrom(
117         socket,
118         buffer,
119         length,
120         flags,
121         ptr::null_mut(),
122         ptr::null_mut(),
123     )
124 }
125 
126 // #[no_mangle]
127 // pub unsafe extern "C" fn recvfrom(
128 //     socket: ::c_int,
129 //     buffer: *mut ::c_void,
130 //     length: ::size_t,
131 //     flags: ::c_int,
132 //     address: *mut sockaddr,
133 //     address_len: *mut socklen_t,
134 // ) -> ::ssize_t {
135 //     trace_expr!(
136 //         platform::pal::recvfrom(socket, buffer, length, flags, address, address_len),
137 //         "recvfrom({}, {:p}, {}, {:#x}, {:p}, {:p})",
138 //         socket,
139 //         buffer,
140 //         length,
141 //         flags,
142 //         address,
143 //         address_len
144 //     )
145 // }
146 
147 #[no_mangle]
148 pub unsafe extern "C" fn send(
149     socket: ::c_int,
150     message: *const ::c_void,
151     length: ::size_t,
152     flags: ::c_int,
153 ) -> ::ssize_t {
154     ::sendto(socket, message, length, flags, ptr::null(), 0)
155 }
156 
157 // #[no_mangle]
158 // pub unsafe extern "C" fn sendto(
159 //     socket: ::c_int,
160 //     message: *const ::c_void,
161 //     length: ::size_t,
162 //     flags: ::c_int,
163 //     dest_addr: *const sockaddr,
164 //     dest_len: socklen_t,
165 // ) -> ::ssize_t {
166 //     trace_expr!(
167 //         platform::pal::sendto(socket, message, length, flags, dest_addr, dest_len),
168 //         "sendto({}, {:p}, {}, {:#x}, {:p}, {})",
169 //         socket,
170 //         message,
171 //         length,
172 //         flags,
173 //         dest_addr,
174 //         dest_len
175 //     )
176 // }
177 
178 // #[no_mangle]
179 // pub unsafe extern "C" fn setsockopt(
180 //     socket: ::c_int,
181 //     level: ::c_int,
182 //     option_name: ::c_int,
183 //     option_value: *const ::c_void,
184 //     option_len: socklen_t,
185 // ) -> ::c_int {
186 //     trace_expr!(
187 //         platform::pal::setsockopt(socket, level, option_name, option_value, option_len),
188 //         "setsockopt({}, {}, {}, {:p}, {})",
189 //         socket,
190 //         level,
191 //         option_name,
192 //         option_value,
193 //         option_len
194 //     )
195 // }
196 
197 // #[no_mangle]
198 // pub unsafe extern "C" fn shutdown(socket: ::c_int, how: ::c_int) -> ::c_int {
199 //     platform::pal::shutdown(socket, how)
200 // }
201 
202 // #[no_mangle]
203 // pub unsafe extern "C" fn socket(domain: ::c_int, kind: ::c_int, protocol: ::c_int) -> ::c_int {
204 //     trace_expr!(
205 //         platform::pal::socket(domain, kind, protocol),
206 //         "socket({}, {}, {})",
207 //         domain,
208 //         kind,
209 //         protocol,
210 //     )
211 // }
212 
213 // #[no_mangle]
214 // pub unsafe extern "C" fn socketpair(
215 //     domain: ::c_int,
216 //     kind: ::c_int,
217 //     protocol: ::c_int,
218 //     sv: *mut ::c_int,
219 // ) -> ::c_int {
220 //     trace_expr!(
221 //         platform::pal::socketpair(domain, kind, protocol, sv),
222 //         "socketpair({}, {}, {}, {:p})",
223 //         domain,
224 //         kind,
225 //         protocol,
226 //         sv
227 //     )
228 // }
229