use ::io::MapNonBlock; use std::io::{self, Read, Write}; pub trait TryRead { fn try_read(&mut self, buf: &mut [u8]) -> io::Result>; } pub trait TryWrite { fn try_write(&mut self, buf: &[u8]) -> io::Result>; } impl TryRead for T { fn try_read(&mut self, dst: &mut [u8]) -> io::Result> { self.read(dst).map_non_block() } } impl TryWrite for T { fn try_write(&mut self, src: &[u8]) -> io::Result> { self.write(src).map_non_block() } } pub trait TryAccept { type Output; fn accept(&self) -> io::Result>; }