Mercurial > lbo > hg > syslog
changeset 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 | 03aa381b5c1c |
children | b049309fccb0 |
files | src/unix_datagram_stream.rs |
diffstat | 1 files changed, 40 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/unix_datagram_stream.rs Sat Nov 26 11:56:13 2016 +0100 @@ -0,0 +1,40 @@ +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))) + } +}