diff options
author | eidheim <eidheim@gmail.com> | 2020-06-28 09:32:45 +0300 |
---|---|---|
committer | eidheim <eidheim@gmail.com> | 2020-06-28 09:32:45 +0300 |
commit | 6ee2a61a64e169471a000a8c91e498728bdc8456 (patch) | |
tree | 823035b93fb0bab0c23379461dfa4d69d490304e | |
parent | 28dd555339f5b17c88d1d5bbc9188bda999b6176 (diff) |
Added fallback to ipv4 if ipv6 is not supported
-rw-r--r-- | server_ws.hpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/server_ws.hpp b/server_ws.hpp index e91a479..9330301 100644 --- a/server_ws.hpp +++ b/server_ws.hpp @@ -363,7 +363,7 @@ namespace SimpleWeb { std::unique_lock<std::mutex> lock(start_stop_mutex); asio::ip::tcp::endpoint endpoint; - if(config.address.size() > 0) + if(!config.address.empty()) endpoint = asio::ip::tcp::endpoint(make_address(config.address), config.port); else endpoint = asio::ip::tcp::endpoint(asio::ip::tcp::v6(), config.port); @@ -375,7 +375,17 @@ namespace SimpleWeb { if(!acceptor) acceptor = std::unique_ptr<asio::ip::tcp::acceptor>(new asio::ip::tcp::acceptor(*io_service)); - acceptor->open(endpoint.protocol()); + try { + acceptor->open(endpoint.protocol()); + } + catch(const system_error &error) { + if(error.code() == asio::error::address_family_not_supported && config.address.empty()) { + endpoint = asio::ip::tcp::endpoint(asio::ip::tcp::v4(), config.port); + acceptor->open(endpoint.protocol()); + } + else + throw; + } acceptor->set_option(asio::socket_base::reuse_address(config.reuse_address)); if(config.fast_open) { #if defined(__linux__) && defined(TCP_FASTOPEN) |