aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorFabio Alessandrelli2017-05-08 13:42:43 +0200
committerFabio Alessandrelli2017-05-12 20:01:53 +0200
commit0dc62633e638e6455247e78554abf0b7073a7e0c (patch)
tree6f544571658cce7c3fc471bccae19cf9b07c36ca /drivers
parent56e23624bf34cfb133f8189db6904b7c2ddcdc24 (diff)
downloadgodot-0dc62633e638e6455247e78554abf0b7073a7e0c.tar.gz
godot-0dc62633e638e6455247e78554abf0b7073a7e0c.tar.zst
godot-0dc62633e638e6455247e78554abf0b7073a7e0c.zip
Diffstat (limited to 'drivers')
-rw-r--r--drivers/unix/socket_helpers.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/unix/socket_helpers.h b/drivers/unix/socket_helpers.h
index b3b0d4e53..03617c01f 100644
--- a/drivers/unix/socket_helpers.h
+++ b/drivers/unix/socket_helpers.h
@@ -71,13 +71,21 @@ static size_t _set_listen_sockaddr(struct sockaddr_storage *p_addr, int p_port,
};
};
-static int _socket_create(IP::Type p_type, int type, int protocol) {
+static int _socket_create(IP::Type &p_type, int type, int protocol) {
ERR_FAIL_COND_V(p_type > IP::TYPE_ANY || p_type < IP::TYPE_NONE, ERR_INVALID_PARAMETER);
int family = p_type == IP::TYPE_IPV4 ? AF_INET : AF_INET6;
int sockfd = socket(family, type, protocol);
+ if (sockfd == -1 && p_type == IP::TYPE_ANY) {
+ // Careful here, changing the referenced parameter so the caller knows that we are using an IPv4 socket
+ // in place of a dual stack one, and further calls to _set_sock_addr will work as expected.
+ p_type = IP::TYPE_IPV4;
+ family = AF_INET;
+ sockfd = socket(family, type, protocol);
+ }
+
ERR_FAIL_COND_V(sockfd == -1, -1);
if (family == AF_INET6) {