fix socket_is_dead on windows
This commit is contained in:
		| @@ -310,22 +310,38 @@ fn socket_is_dead(socket: &TcpStream) -> bool { | ||||
| #[cfg(windows)] | ||||
| fn socket_is_dead(socket: &TcpStream) -> bool { | ||||
|     use std::mem; | ||||
|     use std::os::windows::io::AsRawSocket; | ||||
|     use std::os::windows::io::{AsRawSocket, RawSocket}; | ||||
|     use std::ptr; | ||||
|     use libc::{FD_SET, select, timeval}; | ||||
|     use libc::{c_int, timeval}; | ||||
|  | ||||
|     const FD_SETSIZE: usize = 64; | ||||
|  | ||||
|     #[repr(C)] | ||||
|     struct fd_set { | ||||
|         fd_count: c_int, | ||||
|         fd_array: [RawSocket; FD_SETSIZE], | ||||
|     } | ||||
|  | ||||
|     extern "system" { | ||||
|         fn select(maxfds: c_int, readfs: *mut fd_set, writefs: *mut fd_set, | ||||
|                   errfs: *mut fd_set, timeout: *mut timeval) -> c_int; | ||||
|     } | ||||
|  | ||||
|     let ret = unsafe { | ||||
|         let fd = socket.as_raw_socket(); | ||||
|         let nfds = 0; // msdn says nfds is ignored | ||||
|         let timeout = timeval { | ||||
|         let mut timeout = timeval { | ||||
|             tv_sec: 0, | ||||
|             tv_usec: 0, | ||||
|         }; | ||||
|  | ||||
|         let mut readfs = mem::zeroed(); | ||||
|         let mut errfs = mem::zeroed(); | ||||
|         FD_SET(fd, &mut readfs); | ||||
|         FD_SET(fd, &mut errfs); | ||||
|         let mut readfs: fd_set = mem::zeroed(); | ||||
|         let mut errfs: fd_set = mem::zeroed(); | ||||
|         readfs.fd_count = 1; | ||||
|         readfs.fd_array[0] = fd; | ||||
|         errfs.fd_count = 1; | ||||
|         errfs.fd_array[0] = fd; | ||||
|  | ||||
|         select(nfds, &mut readfs, ptr::null_mut(), &mut errfs, &mut timeout) | ||||
|     }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user