fn read()

in optee-utee/src/net.rs [276:314]


    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
        let mut length: u32 = buf.len() as _;
        let ret = unsafe {
            ((*raw::TEE_udpSocket).recv)(
                self.handle,
                buf.as_mut_ptr() as _,
                &mut length,
                raw::TEE_TIMEOUT_INFINITE,
            )
        };

        match ret {
            raw::TEE_SUCCESS => Ok(length as _),
            raw::TEE_ERROR_CANCEL => {
                Err(io::Error::new(ErrorKind::Interrupted, "TEE_ERROR_CANCEL"))
            }
            raw::TEE_ISOCKET_ERROR_TIMEOUT => Err(io::Error::new(
                ErrorKind::TimedOut,
                "TEE_ISOCKET_ERROR_TIMEOUT",
            )),
            raw::TEE_ERROR_COMMUNICATION => Err(io::Error::new(
                ErrorKind::ConnectionAborted,
                "TEE_ERROR_COMMUNICATION",
            )),
            raw::TEE_ISOCKET_ERROR_REMOTE_CLOSED => Err(io::Error::new(
                ErrorKind::ConnectionAborted,
                "TEE_ISOCKET_ERROR_REMOTE_CLOSED",
            )),
            raw::TEE_ISOCKET_ERROR_PROTOCOL => Err(io::Error::new(
                ErrorKind::Other,
                "TEE_ISOCKET_ERROR_PROTOCOL",
            )),
            raw::TEE_ISOCKET_WARNING_PROTOCOL => Err(io::Error::new(
                ErrorKind::Other,
                "TEE_ISOCKET_WARNING_PROTOCOL",
            )),
            _ => panic!("Unexpected return value"),
        }
    }