1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT 2 // file at the top-level directory of this distribution and at 3 // http://rust-lang.org/COPYRIGHT. 4 // 5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or 6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your 8 // option. This file may not be copied, modified, or distributed 9 // except according to those terms. 10 11 use std::os::windows::io::{FromRawSocket, RawSocket, AsRawSocket}; 12 use winapi::um::winsock2::SOCKET; 13 14 use {TcpBuilder, UdpBuilder, FromInner, AsInner}; 15 use socket::Socket; 16 use sys; 17 18 impl FromRawSocket for TcpBuilder { from_raw_socket(fd: RawSocket) -> TcpBuilder19 unsafe fn from_raw_socket(fd: RawSocket) -> TcpBuilder { 20 let sock = sys::Socket::from_inner(fd as SOCKET); 21 TcpBuilder::from_inner(Socket::from_inner(sock)) 22 } 23 } 24 25 impl AsRawSocket for TcpBuilder { as_raw_socket(&self) -> RawSocket26 fn as_raw_socket(&self) -> RawSocket { 27 // TODO: this unwrap() is very bad 28 self.as_inner().borrow().as_ref().unwrap().as_inner().raw() as RawSocket 29 } 30 } 31 32 impl FromRawSocket for UdpBuilder { from_raw_socket(fd: RawSocket) -> UdpBuilder33 unsafe fn from_raw_socket(fd: RawSocket) -> UdpBuilder { 34 let sock = sys::Socket::from_inner(fd as SOCKET); 35 UdpBuilder::from_inner(Socket::from_inner(sock)) 36 } 37 } 38 39 impl AsRawSocket for UdpBuilder { as_raw_socket(&self) -> RawSocket40 fn as_raw_socket(&self) -> RawSocket { 41 // TODO: this unwrap() is very bad 42 self.as_inner().borrow().as_ref().unwrap().as_inner().raw() as RawSocket 43 } 44 } 45