Properly accept wildcard when binding IPv4 socket.
Also never return null for is_ipv4 to avoid crashes due to engine bug. (better to get an error and a broken socket then seeing your game crash)
This commit is contained in:
parent
35b421b695
commit
1ef9e9ef6a
2 changed files with 2 additions and 3 deletions
|
@ -184,7 +184,7 @@ bool IP_Address::is_ipv4() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t *IP_Address::get_ipv4() const {
|
const uint8_t *IP_Address::get_ipv4() const {
|
||||||
ERR_FAIL_COND_V(!is_ipv4(), 0);
|
ERR_FAIL_COND_V(!is_ipv4(), &(field8[12])); // Not the correct IPv4 (it's an IPv6), but we don't want to return a null pointer risking an engine crash.
|
||||||
return &(field8[12]);
|
return &(field8[12]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,7 @@ size_t NetSocketPosix::_set_addr_storage(struct sockaddr_storage *p_addr, const
|
||||||
} else { // IPv4 socket
|
} else { // IPv4 socket
|
||||||
|
|
||||||
// IPv4 socket with IPv6 address
|
// IPv4 socket with IPv6 address
|
||||||
ERR_FAIL_COND_V(!p_ip.is_ipv4(), 0);
|
ERR_FAIL_COND_V(!p_ip.is_wildcard() && !p_ip.is_ipv4(), 0);
|
||||||
|
|
||||||
struct sockaddr_in *addr4 = (struct sockaddr_in *)p_addr;
|
struct sockaddr_in *addr4 = (struct sockaddr_in *)p_addr;
|
||||||
addr4->sin_family = AF_INET;
|
addr4->sin_family = AF_INET;
|
||||||
|
@ -122,7 +122,6 @@ size_t NetSocketPosix::_set_addr_storage(struct sockaddr_storage *p_addr, const
|
||||||
addr4->sin_addr.s_addr = INADDR_ANY;
|
addr4->sin_addr.s_addr = INADDR_ANY;
|
||||||
}
|
}
|
||||||
|
|
||||||
copymem(&addr4->sin_addr.s_addr, p_ip.get_ipv4(), 4);
|
|
||||||
return sizeof(sockaddr_in);
|
return sizeof(sockaddr_in);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue