diff options
author | Kevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com> | 2018-10-05 09:16:24 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-10-05 12:16:23 -0400 |
commit | 941e27d8c1c2748e62972510f8059838fdc84dad (patch) | |
tree | 831a8b52f35c2a25db8f2ccb19d922747be4f31d /src/resources.rs | |
parent | 6c42ded0970826aaf424f3ae572cb35a4ff212dc (diff) |
Implement closeRead/closeWrite using TcpStream::shutdown (#903)
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 { |