From ab1bfb9007f7d1cca9bb45abfc1559fbbebb4f8a Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 25 Nov 2019 17:14:07 +0100 Subject: NetSocket set_broadcast_enabled returns Error enum --- drivers/unix/net_socket_posix.cpp | 8 +++++--- drivers/unix/net_socket_posix.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'drivers/unix') diff --git a/drivers/unix/net_socket_posix.cpp b/drivers/unix/net_socket_posix.cpp index 5f99a40c79..1eb5150dfc 100644 --- a/drivers/unix/net_socket_posix.cpp +++ b/drivers/unix/net_socket_posix.cpp @@ -603,15 +603,17 @@ Error NetSocketPosix::sendto(const uint8_t *p_buffer, int p_len, int &r_sent, IP return OK; } -void NetSocketPosix::set_broadcasting_enabled(bool p_enabled) { - ERR_FAIL_COND(!is_open()); +Error NetSocketPosix::set_broadcasting_enabled(bool p_enabled) { + ERR_FAIL_COND_V(!is_open(), ERR_UNCONFIGURED); // IPv6 has no broadcast support. - ERR_FAIL_COND(_ip_type == IP::TYPE_IPV6); + ERR_FAIL_COND_V(_ip_type == IP::TYPE_IPV6, ERR_UNAVAILABLE); int par = p_enabled ? 1 : 0; if (setsockopt(_sock, SOL_SOCKET, SO_BROADCAST, SOCK_CBUF(&par), sizeof(int)) != 0) { WARN_PRINT("Unable to change broadcast setting"); + return FAILED; } + return OK; } void NetSocketPosix::set_blocking_enabled(bool p_enabled) { diff --git a/drivers/unix/net_socket_posix.h b/drivers/unix/net_socket_posix.h index e549ea1d6a..fe5a4858de 100644 --- a/drivers/unix/net_socket_posix.h +++ b/drivers/unix/net_socket_posix.h @@ -89,7 +89,7 @@ public: virtual bool is_open() const; virtual int get_available_bytes() const; - virtual void set_broadcasting_enabled(bool p_enabled); + virtual Error set_broadcasting_enabled(bool p_enabled); virtual void set_blocking_enabled(bool p_enabled); virtual void set_ipv6_only_enabled(bool p_enabled); virtual void set_tcp_no_delay_enabled(bool p_enabled); -- cgit v1.2.3 From 9269d6be328e5ca0be3ce9bdb45017e97c799890 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 25 Nov 2019 17:36:09 +0100 Subject: UDP sockets broadcast is now disabled by default. Add method `set_broadcast_enabled` to allow enabling broadcast via GDScript. --- drivers/unix/net_socket_posix.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'drivers/unix') diff --git a/drivers/unix/net_socket_posix.cpp b/drivers/unix/net_socket_posix.cpp index 1eb5150dfc..003c372107 100644 --- a/drivers/unix/net_socket_posix.cpp +++ b/drivers/unix/net_socket_posix.cpp @@ -333,9 +333,10 @@ Error NetSocketPosix::open(Type p_sock_type, IP::Type &ip_type) { set_ipv6_only_enabled(ip_type != IP::TYPE_ANY); } - if (protocol == IPPROTO_UDP && ip_type != IP::TYPE_IPV6) { - // Enable broadcasting for UDP sockets if it's not IPv6 only (IPv6 has no broadcast option). - set_broadcasting_enabled(true); + if (protocol == IPPROTO_UDP) { + // Make sure to disable broadcasting for UDP sockets. + // Depending on the OS, this option might or might not be enabled by default. Let's normalize it. + set_broadcasting_enabled(false); } _is_stream = p_sock_type == TYPE_TCP; @@ -606,7 +607,8 @@ Error NetSocketPosix::sendto(const uint8_t *p_buffer, int p_len, int &r_sent, IP Error NetSocketPosix::set_broadcasting_enabled(bool p_enabled) { ERR_FAIL_COND_V(!is_open(), ERR_UNCONFIGURED); // IPv6 has no broadcast support. - ERR_FAIL_COND_V(_ip_type == IP::TYPE_IPV6, ERR_UNAVAILABLE); + if (_ip_type == IP::TYPE_IPV6) + return ERR_UNAVAILABLE; int par = p_enabled ? 1 : 0; if (setsockopt(_sock, SOL_SOCKET, SO_BROADCAST, SOCK_CBUF(&par), sizeof(int)) != 0) { -- cgit v1.2.3