Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/Simple-WebSocket-Server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreidheim <eidheim@gmail.com>2020-06-28 09:32:45 +0300
committereidheim <eidheim@gmail.com>2020-06-28 09:32:45 +0300
commit6ee2a61a64e169471a000a8c91e498728bdc8456 (patch)
tree823035b93fb0bab0c23379461dfa4d69d490304e
parent28dd555339f5b17c88d1d5bbc9188bda999b6176 (diff)
Added fallback to ipv4 if ipv6 is not supported
-rw-r--r--server_ws.hpp14
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)