view src/unix_datagram_stream.rs @ 2:58aaac3848cb draft

Implement Stream trait for Unix datagram sockets
author Lewin Bormann <lbo@spheniscida.de>
date Sat, 26 Nov 2016 11:56:13 +0100
parents
children
line wrap: on
line source

use std::io;

use tokio_core;

use futures::{Async, Poll, Stream};
use tokio_uds::UnixDatagram;

pub struct UnixDatagramStream {
    sock: UnixDatagram,
    max_len: usize,
    buf: Vec<u8>,
}

pub fn new_unix_dgram_stream(max_recv_len: usize, socket: UnixDatagram) -> UnixDatagramStream {
    let mut buf = Vec::new();
    buf.resize(max_recv_len, 0);

    UnixDatagramStream {
        sock: socket,
        max_len: max_recv_len,
        buf: buf,
    }
}

impl Stream for UnixDatagramStream {
    type Item = Vec<u8>;
    type Error = io::Error;

    fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
        let len = try_nb!(self.sock.recv(&mut self.buf));

        let mut copy = Vec::from(&self.buf[0..len]);

        for i in 0..len {
            self.buf[i] = 0;
        }

        Ok(Async::Ready(Some(copy)))
    }
}