summaryrefslogtreecommitdiff
path: root/implementation/endpoints/src/udp_server_endpoint_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/endpoints/src/udp_server_endpoint_impl.cpp')
-rw-r--r--implementation/endpoints/src/udp_server_endpoint_impl.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/implementation/endpoints/src/udp_server_endpoint_impl.cpp b/implementation/endpoints/src/udp_server_endpoint_impl.cpp
index 8b3fd30..f1cd692 100644
--- a/implementation/endpoints/src/udp_server_endpoint_impl.cpp
+++ b/implementation/endpoints/src/udp_server_endpoint_impl.cpp
@@ -8,7 +8,6 @@
#include <boost/asio/ip/multicast.hpp>
-
#include "../include/endpoint_definition.hpp"
#include "../include/endpoint_host.hpp"
#include "../include/udp_server_endpoint_impl.hpp"
@@ -40,6 +39,12 @@ udp_server_endpoint_impl::udp_server_endpoint_impl(
= configuration::get()->get_unicast_address().to_v4();
boost::asio::ip::multicast::outbound_interface option(its_unicast_address);
socket_.set_option(option);
+ } else if (_local.address().is_v6()) {
+ boost::asio::ip::address_v6 its_unicast_address
+ = configuration::get()->get_unicast_address().to_v6();
+ boost::asio::ip::multicast::outbound_interface option(
+ static_cast<unsigned int>(its_unicast_address.scope_id()));
+ socket_.set_option(option);
}
socket_.bind(_local, ec);
@@ -75,6 +80,7 @@ void udp_server_endpoint_impl::stop() {
server_endpoint_impl::stop();
if (socket_.is_open()) {
boost::system::error_code its_error;
+ socket_.shutdown(socket_type::shutdown_both, its_error);
socket_.close(its_error);
}
}