pub async fn recv_from(&self, recv_buf: &mut [u8]) -> Result<(usize, u8, Address), Error> {
        self.check_associated()?;

        let n = self.socket.recv(recv_buf).await?;

        // Address + Payload
        let mut cur = Cursor::new(&recv_buf[..n]);

        let header = UdpAssociateHeader::read_from(&mut cur).await?;
        let pos = cur.position() as usize;

        recv_buf.copy_within(pos.., 0);

        Ok((n - pos, header.frag, header.address))
    }
Returns a future that receives a single datagram on the socket. On success, the future resolves to the number of bytes read and the origin.

The function must be called with valid byte array buf of sufficient size to hold the message bytes.
If a message is too long to fit in the supplied buffer, excess bytes may be discarded.
crates/shadowsocks-service/src/local/socks/client/socks5/udp_client.rs