diff --git a/src/ossia/network/sockets/configuration.hpp b/src/ossia/network/sockets/configuration.hpp index a384be45878..6c411e25943 100644 --- a/src/ossia/network/sockets/configuration.hpp +++ b/src/ossia/network/sockets/configuration.hpp @@ -28,7 +28,8 @@ struct receive_fd_configuration : fd_configuration struct socket_configuration { std::string host; - uint16_t port; + uint16_t port{}; + bool broadcast{}; }; struct send_socket_configuration : socket_configuration diff --git a/src/ossia/network/sockets/udp_socket.hpp b/src/ossia/network/sockets/udp_socket.hpp index 581126026a6..ec1480c7d9c 100644 --- a/src/ossia/network/sockets/udp_socket.hpp +++ b/src/ossia/network/sockets/udp_socket.hpp @@ -88,7 +88,7 @@ class udp_send_socket public: udp_send_socket(const socket_configuration& conf, boost::asio::io_context& ctx) : m_context{ctx} - , m_endpoint{boost::asio::ip::make_address(conf.host), conf.port} + , m_endpoint{conf.broadcast ? boost::asio::ip::address_v4::broadcast() : boost::asio::ip::make_address(conf.host), conf.port} , m_socket{ctx} { } @@ -102,7 +102,15 @@ class udp_send_socket { } - void connect() { m_socket.open(boost::asio::ip::udp::v4()); } + void connect() + { + m_socket.open(boost::asio::ip::udp::v4()); + + m_socket.set_option(boost::asio::ip::udp::socket::reuse_address(true)); + + if(m_endpoint.address() == boost::asio::ip::address_v4::broadcast()) + m_socket.set_option(boost::asio::socket_base::broadcast(true)); + } void close() {