mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-06 20:13:42 +00:00
libs: add std::os::windows module
The new `std::os::windows` module exposes several extension traits for extracting file descriptors, sockets, and handles from `std::io` types.
This commit is contained in:
parent
af0c446d3b
commit
1e66164210
@ -62,6 +62,11 @@ use vec::Vec;
|
||||
#[cfg(unix)] use c_str::ToCStr;
|
||||
#[cfg(unix)] use libc::c_char;
|
||||
|
||||
#[cfg(unix)]
|
||||
pub use sys::ext as unix;
|
||||
#[cfg(windows)]
|
||||
pub use sys::ext as windows;
|
||||
|
||||
/// Get the number of cores available
|
||||
pub fn num_cpus() -> uint {
|
||||
unsafe {
|
||||
|
100
src/libstd/sys/windows/ext.rs
Normal file
100
src/libstd/sys/windows/ext.rs
Normal file
@ -0,0 +1,100 @@
|
||||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
//! Experimental extensions to `std` for Windows.
|
||||
//!
|
||||
//! For now, this module is limited to extracting handles, file
|
||||
//! descriptors, and sockets, but its functionality will grow over
|
||||
//! time.
|
||||
|
||||
#![experimental]
|
||||
|
||||
use sys_common::AsInner;
|
||||
use libc;
|
||||
|
||||
use io;
|
||||
|
||||
/// Raw HANDLEs.
|
||||
pub type Handle = libc::HANDLE;
|
||||
|
||||
/// Raw SOCKETs.
|
||||
pub type Socket = libc::SOCKET;
|
||||
|
||||
/// Extract raw handles.
|
||||
pub trait AsRawHandle {
|
||||
/// Extract the raw handle, without taking any ownership.
|
||||
fn as_raw_handle(&self) -> Handle;
|
||||
}
|
||||
|
||||
impl AsRawHandle for io::fs::File {
|
||||
fn as_raw_handle(&self) -> Handle {
|
||||
self.as_inner().handle()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRawHandle for io::pipe::PipeStream {
|
||||
fn as_raw_handle(&self) -> Handle {
|
||||
self.as_inner().handle()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRawHandle for io::net::pipe::UnixStream {
|
||||
fn as_raw_handle(&self) -> Handle {
|
||||
self.as_inner().handle()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRawHandle for io::net::pipe::UnixListener {
|
||||
fn as_raw_handle(&self) -> Handle {
|
||||
self.as_inner().handle()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRawHandle for io::net::pipe::UnixAcceptor {
|
||||
fn as_raw_handle(&self) -> Handle {
|
||||
self.as_inner().handle()
|
||||
}
|
||||
}
|
||||
|
||||
/// Extract raw sockets.
|
||||
pub trait AsRawSocket {
|
||||
fn as_raw_socket(&self) -> Socket;
|
||||
}
|
||||
|
||||
impl AsRawSocket for io::net::tcp::TcpStream {
|
||||
fn as_raw_socket(&self) -> Socket {
|
||||
self.as_inner().fd()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRawSocket for io::net::tcp::TcpListener {
|
||||
fn as_raw_socket(&self) -> Socket {
|
||||
self.as_inner().fd()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRawSocket for io::net::tcp::TcpAcceptor {
|
||||
fn as_raw_socket(&self) -> Socket {
|
||||
self.as_inner().fd()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRawSocket for io::net::udp::UdpSocket {
|
||||
fn as_raw_socket(&self) -> Socket {
|
||||
self.as_inner().fd()
|
||||
}
|
||||
}
|
||||
|
||||
/// A prelude for conveniently writing platform-specific code.
|
||||
///
|
||||
/// Includes all extension traits, and some important type definitions.
|
||||
pub mod prelude {
|
||||
pub use super::{Socket, Handle, AsRawSocket, AsRawHandle};
|
||||
}
|
@ -34,6 +34,7 @@ macro_rules! helper_init( (static $name:ident: Helper<$m:ty>) => (
|
||||
) )
|
||||
|
||||
pub mod c;
|
||||
pub mod ext;
|
||||
pub mod fs;
|
||||
pub mod os;
|
||||
pub mod tcp;
|
||||
|
@ -735,7 +735,7 @@ impl UnixAcceptor {
|
||||
}
|
||||
|
||||
pub fn handle(&self) -> libc::HANDLE {
|
||||
self.event.ref0
|
||||
self.listener.handle()
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user