From f874c182a4ab03eea94af40d20bf75c5a64e918e Mon Sep 17 00:00:00 2001
From: Covertness <wuyingfengsui@gmail.com>
Date: Sat, 12 Dec 2015 17:52:53 +0800
Subject: [PATCH] support windows

---
 Cargo.toml         | 5 ++---
 examples/client.rs | 3 ++-
 src/client.rs      | 6 +++++-
 src/lib.rs         | 1 -
 src/server.rs      | 9 ++++-----
 5 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 4bb3445..22ff7f1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "coap"
-version = "0.3.0"
+version = "0.3.1"
 description = "A CoAP library"
 readme = "README.md"
 documentation = "http://covertness.github.io/coap-rs/coap/index.html"
@@ -12,8 +12,7 @@ keywords = ["CoAP"]
 [dependencies]
 bincode = "0.3.0"
 rustc-serialize = "0.3"
-bytes = "0.2.11"
-mio = "0.4"
+mio = "0.5"
 threadpool = "0.1"
 url = "0.2.36"
 num = "0.1"
diff --git a/examples/client.rs b/examples/client.rs
index 48f89e5..aa3d135 100644
--- a/examples/client.rs
+++ b/examples/client.rs
@@ -25,7 +25,8 @@ fn main() {
 		},
 		Err(e) => {
 			match e.kind() {
-			    ErrorKind::WouldBlock => println!("Request timeout"),
+			    ErrorKind::WouldBlock => println!("Request timeout"),   // Unix
+			    ErrorKind::TimedOut => println!("Request timeout"),     // Windows
 			    _ => println!("Request error: {:?}", e),
 			}
 		}
diff --git a/src/client.rs b/src/client.rs
index 5d0f1c5..b2846ba 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -191,6 +191,10 @@ mod test {
 		server.handle(request_handler).unwrap();
 
 		let error = CoAPClient::request_with_timeout("coap://127.0.0.1:5684/Rust", Some(Duration::new(1, 0))).unwrap_err();
-		assert_eq!(error.kind(), ErrorKind::WouldBlock);
+		if cfg!(windows) {
+			assert_eq!(error.kind(), ErrorKind::TimedOut);
+		} else {
+			assert_eq!(error.kind(), ErrorKind::WouldBlock);
+		}
 	}
 }
\ No newline at end of file
diff --git a/src/lib.rs b/src/lib.rs
index 0b09127..14fc6b9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -66,7 +66,6 @@
 
 extern crate bincode;
 extern crate rustc_serialize;
-extern crate bytes;
 extern crate mio;
 extern crate threadpool;
 extern crate url;
diff --git a/src/server.rs b/src/server.rs
index a47b7a9..9bdb9e4 100644
--- a/src/server.rs
+++ b/src/server.rs
@@ -7,7 +7,6 @@ use mio::udp::UdpSocket;
 use packet::Packet;
 use client::CoAPClient;
 use threadpool::ThreadPool;
-use bytes::RingBuf;
 
 const DEFAULT_WORKER_NUM: usize = 4;
 
@@ -51,12 +50,12 @@ impl<H: CoAPHandler + 'static> Handler for UdpHandler<H> {
 	fn ready(&mut self, _: &mut EventLoop<UdpHandler<H>>, _: Token, events: EventSet) {
         if events.is_readable() {
         	let coap_handler = self.coap_handler;
-        	let mut buf = RingBuf::new(1500);
+        	let mut buf = [0; 1500];
 
 			match self.socket.recv_from(&mut buf) {
-				Ok(Some(src)) => {
+				Ok(Some((nread, src))) => {
 					self.thread_pool.execute(move || {
-						match Packet::from_bytes(buf.bytes()) {
+						match Packet::from_bytes(&buf[..nread]) {
 							Ok(packet) => {
 								let client = CoAPClient::new(src).unwrap();
 								coap_handler.handle(packet, client);
@@ -112,7 +111,7 @@ impl CoAPServer {
 						let thread = thread::spawn(move || {
 							let thread_pool = ThreadPool::new(worker_num);
 							let mut event_loop = EventLoop::new().unwrap();
-							event_loop.register(&socket, Token(0)).unwrap();
+							event_loop.register(&socket, Token(0), EventSet::readable(), PollOpt::edge()).unwrap();
 
 							tx.send(event_loop.channel()).unwrap();
 
-- 
GitLab