1 use super::{ 2 super::{types::*, PalSocket}, 3 e, Sys, 4 }; 5 use crate::header::sys_socket::{sockaddr, socklen_t}; 6 7 impl PalSocket for Sys { 8 unsafe fn accept(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int { 9 e(syscall!(ACCEPT, socket, address, address_len)) as c_int 10 } 11 12 unsafe fn bind(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { 13 e(syscall!(BIND, socket, address, address_len)) as c_int 14 } 15 16 unsafe fn connect(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { 17 e(syscall!(CONNECT, socket, address, address_len)) as c_int 18 } 19 20 unsafe fn getpeername( 21 socket: c_int, 22 address: *mut sockaddr, 23 address_len: *mut socklen_t, 24 ) -> c_int { 25 e(syscall!(GETPEERNAME, socket, address, address_len)) as c_int 26 } 27 28 unsafe fn getsockname( 29 socket: c_int, 30 address: *mut sockaddr, 31 address_len: *mut socklen_t, 32 ) -> c_int { 33 e(syscall!(GETSOCKNAME, socket, address, address_len)) as c_int 34 } 35 36 fn getsockopt( 37 socket: c_int, 38 level: c_int, 39 option_name: c_int, 40 option_value: *mut c_void, 41 option_len: *mut socklen_t, 42 ) -> c_int { 43 e(unsafe { 44 syscall!( 45 GETSOCKOPT, 46 socket, 47 level, 48 option_name, 49 option_value, 50 option_len 51 ) 52 }) as c_int 53 } 54 55 fn listen(socket: c_int, backlog: c_int) -> c_int { 56 e(unsafe { syscall!(LISTEN, socket, backlog) }) as c_int 57 } 58 59 unsafe fn recvfrom( 60 socket: c_int, 61 buf: *mut c_void, 62 len: size_t, 63 flags: c_int, 64 address: *mut sockaddr, 65 address_len: *mut socklen_t, 66 ) -> ssize_t { 67 e(syscall!( 68 RECVFROM, 69 socket, 70 buf, 71 len, 72 flags, 73 address, 74 address_len 75 )) as ssize_t 76 } 77 78 unsafe fn sendto( 79 socket: c_int, 80 buf: *const c_void, 81 len: size_t, 82 flags: c_int, 83 dest_addr: *const sockaddr, 84 dest_len: socklen_t, 85 ) -> ssize_t { 86 e(syscall!( 87 SENDTO, socket, buf, len, flags, dest_addr, dest_len 88 )) as ssize_t 89 } 90 91 fn setsockopt( 92 socket: c_int, 93 level: c_int, 94 option_name: c_int, 95 option_value: *const c_void, 96 option_len: socklen_t, 97 ) -> c_int { 98 e(unsafe { 99 syscall!( 100 SETSOCKOPT, 101 socket, 102 level, 103 option_name, 104 option_value, 105 option_len 106 ) 107 }) as c_int 108 } 109 110 fn shutdown(socket: c_int, how: c_int) -> c_int { 111 e(unsafe { syscall!(SHUTDOWN, socket, how) }) as c_int 112 } 113 114 unsafe fn socket(domain: c_int, kind: c_int, protocol: c_int) -> c_int { 115 e(syscall!(SOCKET, domain, kind, protocol)) as c_int 116 } 117 118 fn socketpair(domain: c_int, kind: c_int, protocol: c_int, sv: &mut [c_int; 2]) -> c_int { 119 e(unsafe { syscall!(SOCKETPAIR, domain, kind, protocol, sv.as_mut_ptr()) }) as c_int 120 } 121 } 122