libstd: Implement some missing tcp methods.
This commit is contained in:
parent
005ea3b173
commit
a5c6b85091
@ -52,18 +52,18 @@ pub trait IoFactory {
|
||||
|
||||
pub trait RtioTcpListener : RtioSocket {
|
||||
fn accept(&mut self) -> Result<~RtioTcpStreamObject, IoError>;
|
||||
fn accept_simultaneously(&mut self);
|
||||
fn dont_accept_simultaneously(&mut self);
|
||||
fn accept_simultaneously(&mut self) -> Result<(), IoError>;
|
||||
fn dont_accept_simultaneously(&mut self) -> Result<(), IoError>;
|
||||
}
|
||||
|
||||
pub trait RtioTcpStream : RtioSocket {
|
||||
fn read(&mut self, buf: &mut [u8]) -> Result<uint, IoError>;
|
||||
fn write(&mut self, buf: &[u8]) -> Result<(), IoError>;
|
||||
fn peer_name(&mut self) -> Result<IpAddr, IoError>;
|
||||
fn control_congestion(&mut self);
|
||||
fn nodelay(&mut self);
|
||||
fn keepalive(&mut self, delay_in_seconds: uint);
|
||||
fn letdie(&mut self);
|
||||
fn control_congestion(&mut self) -> Result<(), IoError>;
|
||||
fn nodelay(&mut self) -> Result<(), IoError>;
|
||||
fn keepalive(&mut self, delay_in_seconds: uint) -> Result<(), IoError>;
|
||||
fn letdie(&mut self) -> Result<(), IoError>;
|
||||
}
|
||||
|
||||
pub trait RtioSocket {
|
||||
|
@ -15,7 +15,7 @@ use cell::Cell;
|
||||
use cast;
|
||||
use cast::transmute;
|
||||
use clone::Clone;
|
||||
use libc::c_void;
|
||||
use libc::{c_int, c_uint, c_void};
|
||||
use rt::io::IoError;
|
||||
use rt::io::net::ip::IpAddr;
|
||||
use rt::uv::*;
|
||||
@ -404,9 +404,27 @@ impl RtioTcpListener for UvTcpListener {
|
||||
return self.incoming_streams.recv();
|
||||
}
|
||||
|
||||
// XXX implement
|
||||
fn accept_simultaneously(&mut self) { fail!(); }
|
||||
fn dont_accept_simultaneously(&mut self) { fail!(); }
|
||||
fn accept_simultaneously(&mut self) -> Result<(), IoError> {
|
||||
let r = unsafe {
|
||||
uvll::rust_uv_tcp_simultaneous_accepts(self.watcher.native_handle(), 1 as c_int)
|
||||
};
|
||||
|
||||
match status_to_maybe_uv_error(self.watcher, r) {
|
||||
Some(err) => Err(uv_error_to_io_error(err)),
|
||||
None => Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn dont_accept_simultaneously(&mut self) -> Result<(), IoError> {
|
||||
let r = unsafe {
|
||||
uvll::rust_uv_tcp_simultaneous_accepts(self.watcher.native_handle(), 0 as c_int)
|
||||
};
|
||||
|
||||
match status_to_maybe_uv_error(self.watcher, r) {
|
||||
Some(err) => Err(uv_error_to_io_error(err)),
|
||||
None => Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct UvTcpStream(TcpWatcher);
|
||||
@ -507,11 +525,50 @@ impl RtioTcpStream for UvTcpStream {
|
||||
socket_name(TcpPeer, **self)
|
||||
}
|
||||
|
||||
// XXX implement
|
||||
fn control_congestion(&mut self) { fail!(); }
|
||||
fn nodelay(&mut self) { fail!(); }
|
||||
fn keepalive(&mut self, _delay_in_seconds: uint) { fail!(); }
|
||||
fn letdie(&mut self) { fail!(); }
|
||||
fn control_congestion(&mut self) -> Result<(), IoError> {
|
||||
let r = unsafe {
|
||||
uvll::rust_uv_tcp_nodelay(self.native_handle(), 0 as c_int)
|
||||
};
|
||||
|
||||
match status_to_maybe_uv_error(**self, r) {
|
||||
Some(err) => Err(uv_error_to_io_error(err)),
|
||||
None => Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn nodelay(&mut self) -> Result<(), IoError> {
|
||||
let r = unsafe {
|
||||
uvll::rust_uv_tcp_nodelay(self.native_handle(), 1 as c_int)
|
||||
};
|
||||
|
||||
match status_to_maybe_uv_error(**self, r) {
|
||||
Some(err) => Err(uv_error_to_io_error(err)),
|
||||
None => Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn keepalive(&mut self, delay_in_seconds: uint) -> Result<(), IoError> {
|
||||
let r = unsafe {
|
||||
uvll::rust_uv_tcp_keepalive(self.native_handle(), 1 as c_int,
|
||||
delay_in_seconds as c_uint)
|
||||
};
|
||||
|
||||
match status_to_maybe_uv_error(**self, r) {
|
||||
Some(err) => Err(uv_error_to_io_error(err)),
|
||||
None => Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn letdie(&mut self) -> Result<(), IoError> {
|
||||
let r = unsafe {
|
||||
uvll::rust_uv_tcp_keepalive(self.native_handle(), 0 as c_int, 0 as c_uint)
|
||||
};
|
||||
|
||||
match status_to_maybe_uv_error(**self, r) {
|
||||
Some(err) => Err(uv_error_to_io_error(err)),
|
||||
None => Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct UvUdpSocket(UdpWatcher);
|
||||
|
Loading…
x
Reference in New Issue
Block a user