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