mirror of https://github.com/mohtar/rust-fastcgi
63 lines
1.4 KiB
Rust
63 lines
1.4 KiB
Rust
use std::io::{self, Read, Write};
|
|
use std::net::{TcpListener, TcpStream, SocketAddr};
|
|
|
|
pub struct Transport<'a> {
|
|
inner: &'a TcpListener,
|
|
}
|
|
|
|
impl<'a> Transport<'a> {
|
|
pub fn from_tcp(listener: &'a TcpListener) -> Self {
|
|
Transport { inner: listener }
|
|
}
|
|
|
|
pub fn accept(&mut self) -> io::Result<Socket> {
|
|
let (stream, _) = try!(self.inner.accept());
|
|
Ok(Socket { inner: stream })
|
|
}
|
|
}
|
|
|
|
pub struct Socket {
|
|
inner: TcpStream,
|
|
}
|
|
|
|
impl Socket {
|
|
pub fn peer(&self) -> io::Result<String> {
|
|
match try!(self.inner.peer_addr()) {
|
|
SocketAddr::V4(addr) => Ok(addr.ip().to_string()),
|
|
SocketAddr::V6(addr) => Ok(addr.ip().to_string()),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<'a> Read for &'a Socket {
|
|
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
|
(&self.inner).read(buf)
|
|
}
|
|
}
|
|
|
|
impl<'a> Write for &'a Socket {
|
|
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
|
|
(&self.inner).write(buf)
|
|
}
|
|
|
|
fn flush(&mut self) -> io::Result<()> {
|
|
(&self.inner).flush()
|
|
}
|
|
}
|
|
|
|
impl Read for Socket {
|
|
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
|
(&*self).read(buf)
|
|
}
|
|
}
|
|
|
|
impl Write for Socket {
|
|
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
|
|
(&*self).write(buf)
|
|
}
|
|
|
|
fn flush(&mut self) -> io::Result<()> {
|
|
(&*self).flush()
|
|
}
|
|
}
|