summaryrefslogtreecommitdiff
path: root/src/resources.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/resources.rs')
-rw-r--r--src/resources.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/resources.rs b/src/resources.rs
index 75bad04b7..5a13e6cbf 100644
--- a/src/resources.rs
+++ b/src/resources.rs
@@ -8,13 +8,15 @@
// descriptors". This module implements a global resource table. Ops (AKA
// handlers) look up resources by their integer id here.
+use errors::DenoError;
+
use futures;
use futures::Poll;
use std;
use std::collections::HashMap;
use std::io::Error;
use std::io::{Read, Write};
-use std::net::SocketAddr;
+use std::net::{Shutdown, SocketAddr};
use std::sync::atomic::AtomicIsize;
use std::sync::atomic::Ordering;
use std::sync::Mutex;
@@ -79,6 +81,20 @@ impl Resource {
let r = table.remove(&self.rid);
assert!(r.is_some());
}
+
+ pub fn shutdown(&mut self, how: Shutdown) -> Result<(), DenoError> {
+ let mut table = RESOURCE_TABLE.lock().unwrap();
+ let maybe_repr = table.get_mut(&self.rid);
+ match maybe_repr {
+ None => panic!("bad rid"),
+ Some(repr) => match repr {
+ Repr::TcpStream(ref mut f) => {
+ TcpStream::shutdown(f, how).map_err(|err| DenoError::from(err))
+ }
+ _ => panic!("Cannot shutdown"),
+ },
+ }
+ }
}
impl Read for Resource {