diff options
author | bnewbold <bnewbold@robocracy.org> | 2016-06-02 17:18:44 -0400 |
---|---|---|
committer | bnewbold <bnewbold@robocracy.org> | 2016-06-02 17:18:44 -0400 |
commit | 362dbf20d6b990a092bc220d36289144e86aaa6d (patch) | |
tree | 525ca8bb8f7935c3f319cadf3682155b56e01c77 /src/udt_extras.rs | |
parent | e6fd66b7a28b51ffb74f2d4fb8617fa8d091e706 (diff) | |
download | ucp-362dbf20d6b990a092bc220d36289144e86aaa6d.tar.gz ucp-362dbf20d6b990a092bc220d36289144e86aaa6d.zip |
start transition to UDT transport
Diffstat (limited to 'src/udt_extras.rs')
-rw-r--r-- | src/udt_extras.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/udt_extras.rs b/src/udt_extras.rs new file mode 100644 index 0000000..f4a714b --- /dev/null +++ b/src/udt_extras.rs @@ -0,0 +1,44 @@ + +extern crate udt; + +use std::str::{self, FromStr}; +use udt::{UdtSocket}; +use std::io; +use std::io::{Read, Write, ErrorKind}; + +pub struct UdtStream { + socket: UdtSocket, +} + +impl UdtStream { + + pub fn new(socket: UdtSocket) -> UdtStream { + UdtStream { socket: socket } + + } +} + +impl Read for UdtStream { + fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { + let buf_len = buf.len(); + match self.socket.recv(buf, buf_len) { + Ok(len) => Ok(len as usize), + Err(err) => Err(io::Error::new( + ErrorKind::Other, err.err_msg)), + } + } +} + +impl Write for UdtStream { + fn write(&mut self, buf: &[u8]) -> io::Result<usize> { + match self.socket.send(buf) { + Ok(len) => Ok(len as usize), + Err(err) => Err(io::Error::new( + ErrorKind::Other, err.err_msg)), + } + } + + fn flush(&mut self) -> io::Result<()> { + Ok(()) + } +} |