diff options
author | Gino Maisto <luigi.maisto@gmail.com> | 2016-03-14 19:43:45 +0100 |
---|---|---|
committer | Gino Maisto <luigi.maisto@gmail.com> | 2016-03-14 19:43:45 +0100 |
commit | e5d73b4c5303ae8a8a3fe027146f1dd35f9166f4 (patch) | |
tree | b4d493373580ed7a71b4bdb8454e16f6fe0b44f3 | |
parent | 206ecc77601725f3b3a34f28c58b00b835177148 (diff) | |
download | crow-e5d73b4c5303ae8a8a3fe027146f1dd35f9166f4.tar.gz crow-e5d73b4c5303ae8a8a3fe027146f1dd35f9166f4.zip |
Added support to bind to a specific interface
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | include/crow.h | 19 | ||||
-rw-r--r-- | include/http_server.h | 12 |
3 files changed, 20 insertions, 12 deletions
@@ -32,3 +32,4 @@ unittest build .directory +crow_all.h diff --git a/include/crow.h b/include/crow.h index ec4c0ee..31b96cb 100644 --- a/include/crow.h +++ b/include/crow.h @@ -9,7 +9,7 @@ #include <thread> #include "settings.h" -#include "logging.h" +#include "logging.h" #include "utility.h" #include "routing.h" #include "middleware_context.h" @@ -64,6 +64,12 @@ namespace crow return *this; } + self_t& bindaddr(std::string bindaddr) + { + bindaddr_ = bindaddr; + return *this; + } + self_t& multithreaded() { return concurrency(std::thread::hardware_concurrency()); @@ -88,13 +94,13 @@ namespace crow #ifdef CROW_ENABLE_SSL if (use_ssl_) { - ssl_server_t server(this, port_, &middlewares_, concurrency_, &ssl_context_); + ssl_server_t server(this, bindaddr_, port_, &middlewares_, concurrency_, &ssl_context_); server.run(); } else #endif { - server_t server(this, port_, &middlewares_, concurrency_, nullptr); + server_t server(this, bindaddr_, port_, &middlewares_, concurrency_, nullptr); server.run(); } } @@ -151,7 +157,7 @@ namespace crow // We can't call .ssl() member function unless CROW_ENABLE_SSL is defined. static_assert( // make static_assert dependent to T; always false - std::is_base_of<T, void>::value, + std::is_base_of<T, void>::value, "Define CROW_ENABLE_SSL to enable ssl support."); return *this; } @@ -162,7 +168,7 @@ namespace crow // We can't call .ssl() member function unless CROW_ENABLE_SSL is defined. static_assert( // make static_assert dependent to T; always false - std::is_base_of<T, void>::value, + std::is_base_of<T, void>::value, "Define CROW_ENABLE_SSL to enable ssl support."); return *this; } @@ -187,7 +193,7 @@ namespace crow private: uint16_t port_ = 80; uint16_t concurrency_ = 1; - + std::string bindaddr_ = "0.0.0.0"; Router router_; std::tuple<Middlewares...> middlewares_; @@ -196,4 +202,3 @@ namespace crow using App = Crow<Middlewares...>; using SimpleApp = Crow<>; }; - diff --git a/include/http_server.h b/include/http_server.h index 80ef7a4..e751116 100644 --- a/include/http_server.h +++ b/include/http_server.h @@ -20,16 +20,17 @@ namespace crow { using namespace boost; using tcp = asio::ip::tcp; - + template <typename Handler, typename Adaptor = SocketAdaptor, typename ... Middlewares> class Server { public: - Server(Handler* handler, uint16_t port, std::tuple<Middlewares...>* middlewares = nullptr, uint16_t concurrency = 1, typename Adaptor::context* adaptor_ctx = nullptr) - : acceptor_(io_service_, tcp::endpoint(asio::ip::address(), port)), + Server(Handler* handler, std::string bindaddr, uint16_t port, std::tuple<Middlewares...>* middlewares = nullptr, uint16_t concurrency = 1, typename Adaptor::context* adaptor_ctx = nullptr) + : acceptor_(io_service_, tcp::endpoint(boost::asio::ip::address::from_string(bindaddr), port)), signals_(io_service_, SIGINT, SIGTERM), - handler_(handler), + handler_(handler), concurrency_(concurrency), + bindaddr_(bindaddr), port_(port), middlewares_(middlewares), adaptor_ctx_(adaptor_ctx) @@ -145,7 +146,7 @@ namespace crow is, handler_, server_name_, middlewares_, get_cached_date_str_pool_[roundrobin_index_], *timer_queue_pool_[roundrobin_index_], adaptor_ctx_); - acceptor_.async_accept(p->socket(), + acceptor_.async_accept(p->socket(), [this, p, &is](boost::system::error_code ec) { if (!ec) @@ -171,6 +172,7 @@ namespace crow uint16_t concurrency_{1}; std::string server_name_ = "Crow/0.1"; uint16_t port_; + std::string bindaddr_; unsigned int roundrobin_index_{}; std::tuple<Middlewares...>* middlewares_; |