(
fd: i32,
mut src: impl Read + IoBuf,
flags: u32,
addr: UserConstPtr<sockaddr>,
addrlen: socklen_t,
cmsg: Vec<CMsgData>,
)
| 17 | }; |
| 18 | |
| 19 | fn send_impl( |
| 20 | fd: i32, |
| 21 | mut src: impl Read + IoBuf, |
| 22 | flags: u32, |
| 23 | addr: UserConstPtr<sockaddr>, |
| 24 | addrlen: socklen_t, |
| 25 | cmsg: Vec<CMsgData>, |
| 26 | ) -> AxResult<isize> { |
| 27 | let addr = if addr.is_null() || addrlen == 0 { |
| 28 | None |
| 29 | } else { |
| 30 | Some(SocketAddrEx::read_from_user(addr, addrlen)?) |
| 31 | }; |
| 32 | |
| 33 | debug!("sys_send <= fd: {fd}, flags: {flags}, addr: {addr:?}"); |
| 34 | |
| 35 | let socket = Socket::from_fd(fd)?; |
| 36 | let sent = socket.send( |
| 37 | &mut src, |
| 38 | SendOptions { |
| 39 | to: addr, |
| 40 | flags: SendFlags::default(), |
| 41 | cmsg, |
| 42 | }, |
| 43 | )?; |
| 44 | |
| 45 | Ok(sent as isize) |
| 46 | } |
| 47 | |
| 48 | pub fn sys_sendto( |
| 49 | fd: i32, |
no test coverage detected