diff --git a/Cargo.toml b/Cargo.toml index 74755bcdf..bd713e4dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,9 +43,8 @@ fuchsia-zircon-sys = "0.3.2" libc = "0.2.54" [target.'cfg(windows)'.dependencies] -winapi = "0.2.6" -miow = "0.2.2" -kernel32-sys = "0.2" +winapi = { version = "0.3.7", features = ["minwindef", "minwinbase", "ioapiset", "winsock2"] } +miow = "0.3.3" [dev-dependencies] env_logger = { version = "0.4.0", default-features = false } diff --git a/src/lib.rs b/src/lib.rs index d6d411b71..96f704603 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -126,9 +126,6 @@ extern crate miow; #[cfg(windows)] extern crate winapi; -#[cfg(windows)] -extern crate kernel32; - #[macro_use] extern crate log; diff --git a/src/sys/windows/mod.rs b/src/sys/windows/mod.rs index dad70b0c1..41f5997a2 100644 --- a/src/sys/windows/mod.rs +++ b/src/sys/windows/mod.rs @@ -139,7 +139,6 @@ use std::io; use std::os::windows::prelude::*; -use kernel32; use winapi; mod awakener; @@ -162,8 +161,8 @@ enum Family { unsafe fn cancel(socket: &AsRawSocket, overlapped: &Overlapped) -> io::Result<()> { - let handle = socket.as_raw_socket() as winapi::HANDLE; - let ret = kernel32::CancelIoEx(handle, overlapped.as_mut_ptr()); + let handle = socket.as_raw_socket() as winapi::um::winnt::HANDLE; + let ret = winapi::um::ioapiset::CancelIoEx(handle, overlapped.as_mut_ptr()); if ret == 0 { Err(io::Error::last_os_error()) } else { @@ -171,15 +170,15 @@ unsafe fn cancel(socket: &AsRawSocket, } } -unsafe fn no_notify_on_instant_completion(handle: winapi::HANDLE) -> io::Result<()> { +unsafe fn no_notify_on_instant_completion(handle: winapi::um::winnt::HANDLE) -> io::Result<()> { // TODO: move those to winapi - const FILE_SKIP_COMPLETION_PORT_ON_SUCCESS: winapi::UCHAR = 1; - const FILE_SKIP_SET_EVENT_ON_HANDLE: winapi::UCHAR = 2; + const FILE_SKIP_COMPLETION_PORT_ON_SUCCESS: winapi::shared::minwindef::UCHAR = 1; + const FILE_SKIP_SET_EVENT_ON_HANDLE: winapi::shared::minwindef::UCHAR = 2; let flags = FILE_SKIP_COMPLETION_PORT_ON_SUCCESS | FILE_SKIP_SET_EVENT_ON_HANDLE; - let r = kernel32::SetFileCompletionNotificationModes(handle, flags); - if r == winapi::TRUE { + let r = winapi::um::winbase::SetFileCompletionNotificationModes(handle, flags); + if r == winapi::shared::minwindef::TRUE { Ok(()) } else { Err(io::Error::last_os_error()) diff --git a/src/sys/windows/selector.rs b/src/sys/windows/selector.rs index 5692084c7..9df16f8ad 100644 --- a/src/sys/windows/selector.rs +++ b/src/sys/windows/selector.rs @@ -9,7 +9,9 @@ use std::time::Duration; use lazycell::AtomicLazyCell; -use winapi::*; +use winapi::shared::winerror::WAIT_TIMEOUT; +use winapi::um::minwinbase::OVERLAPPED; +use winapi::um::minwinbase::OVERLAPPED_ENTRY; use miow; use miow::iocp::{CompletionPort, CompletionStatus}; diff --git a/src/sys/windows/tcp.rs b/src/sys/windows/tcp.rs index f2ab39f5c..e960de674 100644 --- a/src/sys/windows/tcp.rs +++ b/src/sys/windows/tcp.rs @@ -9,7 +9,8 @@ use std::time::Duration; use miow::iocp::CompletionStatus; use miow::net::*; use net2::{TcpBuilder, TcpStreamExt as Net2TcpExt}; -use winapi::*; +use winapi::um::minwinbase::OVERLAPPED_ENTRY; +use winapi::um::winnt::HANDLE; use iovec::IoVec; use {poll, Ready, Poll, PollOpt, Token}; @@ -746,8 +747,13 @@ impl ListenerImp { Family::V6 => TcpBuilder::new_v6(), }.and_then(|builder| unsafe { trace!("scheduling an accept"); - self.inner.socket.accept_overlapped(&builder, &mut me.accept_buf, - self.inner.accept.as_mut_ptr()) + let socket = builder.to_tcp_stream()?; + let ready = self.inner.socket.accept_overlapped( + &socket, + &mut me.accept_buf, + self.inner.accept.as_mut_ptr(), + )?; + Ok((socket, ready)) }); match res { Ok((socket, _)) => { diff --git a/src/sys/windows/udp.rs b/src/sys/windows/udp.rs index 4d3fc040f..18acb72b1 100644 --- a/src/sys/windows/udp.rs +++ b/src/sys/windows/udp.rs @@ -12,7 +12,8 @@ use std::sync::{Mutex, MutexGuard}; #[allow(unused_imports)] use net2::{UdpBuilder, UdpSocketExt}; -use winapi::*; +use winapi::um::minwinbase::OVERLAPPED_ENTRY; +use winapi::um::winsock2::WSAEMSGSIZE; use miow::iocp::CompletionStatus; use miow::net::SocketAddrBuf; use miow::net::UdpSocketExt as MiowUdpSocketExt;