xref: /drstd/dlibc/src/unix/platform/dragonos/pal/relibc_adapter/pal_socket.rs (revision 86982c5e9b2eaa583327251616ee822c36288824)
1 use crate::unix::*;
2 use dsc::syscall;
3 use crate::unix::platform::pal::{e,errno};
4 use sockaddr;
5 #[no_mangle]
6 pub unsafe extern "C" fn accept(socket: ::c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> ::c_int{
7 	e(syscall!(
8         SYS_ACCEPT,
9         socket as usize,
10         address as usize,
11         address_len as usize
12     )) as ::c_int
13 }
14 
15 #[no_mangle]
16 pub unsafe extern "C" fn bind(socket: ::c_int, address: *const ::sockaddr, address_len: ::socklen_t) -> ::c_int{
17 	e(syscall!(SYS_BIND, socket, address, address_len)) as ::c_int
18 }
19 
20 #[no_mangle]
21 pub unsafe extern "C" fn connect(socket: ::c_int, address: *const sockaddr, address_len: socklen_t) -> ::c_int {
22     e(syscall!(SYS_CONNECT, socket, address, address_len)) as ::c_int
23 }
24 
25 #[no_mangle]
26 pub unsafe extern "C" fn getpeername(
27     socket: ::c_int,
28     address: *mut sockaddr,
29     address_len: *mut socklen_t,
30 ) -> ::c_int {
31     e(syscall!(SYS_GETPEERNAME, socket, address, address_len)) as ::c_int
32 }
33 
34 #[no_mangle]
35 pub unsafe extern "C" fn getsockname(
36     socket: ::c_int,
37     address: *mut sockaddr,
38     address_len: *mut socklen_t,
39 ) -> ::c_int {
40     e(syscall!(SYS_GETSOCKNAME, socket, address, address_len)) as ::c_int
41 }
42 
43 #[no_mangle]
44 pub extern "C" fn getsockopt(
45     socket: ::c_int,
46     level: ::c_int,
47     option_name: ::c_int,
48     option_value: *mut c_void,
49     option_len: *mut socklen_t,
50 ) -> ::c_int {
51     e(unsafe {
52         syscall!(
53             SYS_GETSOCKOPT,
54             socket,
55             level,
56             option_name,
57             option_value,
58             option_len
59         )
60     }) as ::c_int
61 }
62 
63 #[no_mangle]
64 pub extern "C" fn listen(socket: ::c_int, backlog: ::c_int) -> ::c_int {
65     e(unsafe { syscall!(SYS_LISTEN, socket, backlog) }) as ::c_int
66 }
67 
68 #[no_mangle]
69 pub extern "C" fn recvfrom(
70 	socket: ::c_int,
71 	buf: *mut ::c_void,
72 	len: ::size_t,
73 	flags: ::c_int,
74 	addr: *mut ::sockaddr,
75 	addrlen: *mut ::socklen_t,
76 ) -> ::ssize_t{
77 	e(unsafe{syscall!(
78         SYS_RECVFROM,
79         socket,
80         buf,
81         len,
82         flags,
83         addr,
84         addrlen
85     )}) as ssize_t
86 }
87 
88 #[no_mangle]
89 pub extern "C" fn sendto(
90     socket: ::c_int,
91     buf: *const ::c_void,
92     len: ::size_t,
93     flags: ::c_int,
94     addr: *const sockaddr,
95     addrlen: socklen_t,
96 ) -> ::ssize_t{
97 	e(unsafe{syscall!(
98         SYS_SENDTO, socket, buf, len, flags, addr, addrlen
99     )}) as ssize_t
100 }
101 
102 #[no_mangle]
103 pub extern "C" fn setsockopt(
104     socket: ::c_int,
105     level: ::c_int,
106     name: ::c_int,
107     value: *const ::c_void,
108     option_len: socklen_t,
109 ) -> ::c_int{
110 	e(unsafe {
111         syscall!(
112             SYS_SETSOCKOPT,
113             socket,
114             level,
115             name,
116             value,
117             option_len
118         )
119     }) as ::c_int
120 }
121 
122 #[no_mangle]
123 pub extern "C" fn shutdown(socket: ::c_int, how: ::c_int) -> ::c_int{
124 	e(unsafe { syscall!(SYS_SHUTDOWN, socket, how) }) as ::c_int
125 }
126 
127 #[no_mangle]
128 pub extern "C" fn socket(domain: ::c_int, ty: ::c_int, protocol: ::c_int) -> ::c_int{
129 	e(unsafe{syscall!(SYS_SOCKET, domain, ty, protocol)}) as ::c_int
130 }
131 
132 #[no_mangle]
133 pub extern "C" fn socketpair(
134     domain: ::c_int,
135     type_: ::c_int,
136     protocol: ::c_int,
137     socket_vector: *mut ::c_int,
138 ) -> ::c_int{
139 	unimplemented!()
140 }