Mercurial > lbo > hg > syslog
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))) } }