From c2741054bb7219f407cfcc055b8d5741d6b652c3 Mon Sep 17 00:00:00 2001
From: messense <messense@icloud.com>
Date: Mon, 5 Mar 2018 21:09:13 +0800
Subject: [PATCH] Add unix domain socket example

---
 .travis.yml                      |  1 +
 Cargo.toml                       |  1 +
 examples/unix-socket/Cargo.toml  | 10 ++++++++++
 examples/unix-socket/src/main.rs | 31 +++++++++++++++++++++++++++++++
 4 files changed, 43 insertions(+)
 create mode 100644 examples/unix-socket/Cargo.toml
 create mode 100644 examples/unix-socket/src/main.rs

diff --git a/.travis.yml b/.travis.yml
index 33fe904de..ddaaae14b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -65,6 +65,7 @@ script:
       cd examples/tls && cargo check && cd ../..
       cd examples/websocket-chat && cargo check && cd ../..
       cd examples/websocket && cargo check && cd ../..
+      cd examples/unix-socket && cargo check && cd ../..
     fi
   - |
     if [[ "$TRAVIS_RUST_VERSION" == "nightly" && $CLIPPY ]]; then
diff --git a/Cargo.toml b/Cargo.toml
index eeca59366..9387ad6f2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -114,5 +114,6 @@ members = [
   "examples/websocket",
   "examples/websocket-chat",
   "examples/web-cors/backend",
+  "examples/unix-socket",
   "tools/wsload/",
 ]
diff --git a/examples/unix-socket/Cargo.toml b/examples/unix-socket/Cargo.toml
new file mode 100644
index 000000000..a7c31f212
--- /dev/null
+++ b/examples/unix-socket/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "unix-socket"
+version = "0.1.0"
+authors = ["Messense Lv <messense@icloud.com>"]
+
+[dependencies]
+env_logger = "0.5"
+actix = "0.5"
+actix-web = { path = "../../" }
+tokio-uds = "0.1"
diff --git a/examples/unix-socket/src/main.rs b/examples/unix-socket/src/main.rs
new file mode 100644
index 000000000..a56d428a7
--- /dev/null
+++ b/examples/unix-socket/src/main.rs
@@ -0,0 +1,31 @@
+extern crate actix;
+extern crate actix_web;
+extern crate env_logger;
+extern crate tokio_uds;
+
+use actix::*;
+use actix_web::*;
+use tokio_uds::UnixListener;
+
+
+fn index(_req: HttpRequest) -> &'static str {
+    "Hello world!"
+}
+
+fn main() {
+    ::std::env::set_var("RUST_LOG", "actix_web=info");
+    let _ = env_logger::init();
+    let sys = actix::System::new("unix-socket");
+
+    let listener = UnixListener::bind("/tmp/actix-uds.socket", Arbiter::handle()).expect("bind failed");
+    let _addr = HttpServer::new(
+        || Application::new()
+            // enable logger
+            .middleware(middleware::Logger::default())
+            .resource("/index.html", |r| r.f(|_| "Hello world!"))
+            .resource("/", |r| r.f(index)))
+        .start_incoming(listener.incoming(), false);
+
+    println!("Started http server: /tmp/actix-uds.socket");
+    let _ = sys.run();
+}