diff options
Diffstat (limited to 'src/resources.rs')
-rw-r--r-- | src/resources.rs | 18 |
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 { |