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)))
+    }
+}