mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 13:08:50 +02:00
obs-outputs: Fix binding to IPv6 addresses on *nix
Fix inet_ntop()/inet_pton() being called with an incorrect argument for IPv6 addresses. On Linux, the offset of the sin_addr and sin6_addr fields differ and the confusion on the inet_ntop() call produces an erroneous IPv6 string representation such as "0:0:2001:db8::". This is visible on the UI, Settings -> Advanced -> Network -> Bind to IP. The same goes for the inet_pton() call.
This commit is contained in:
parent
09b5290c7b
commit
fb7a037bc8
@ -60,7 +60,7 @@ static void netif_convert_to_string(char *dest,
|
||||
temp_char, INET6_ADDRSTRLEN);
|
||||
else if (family == AF_INET6)
|
||||
inet_ntop(family,
|
||||
&(((struct sockaddr_in *)byte_address)->sin_addr),
|
||||
&(((struct sockaddr_in6 *)byte_address)->sin6_addr),
|
||||
temp_char, INET6_ADDRSTRLEN);
|
||||
#else
|
||||
if (family == AF_INET)
|
||||
@ -116,12 +116,12 @@ bool netif_str_to_addr(struct sockaddr_storage *out, int *addr_len,
|
||||
warn("Could not parse address, error code: %d", GetLastError());
|
||||
return ret != SOCKET_ERROR;
|
||||
#else
|
||||
struct sockaddr_in *sin = (struct sockaddr_in *)out;
|
||||
if (inet_pton(out->ss_family, addr, &sin->sin_addr)) {
|
||||
*addr_len = ipv6 ? sizeof(struct sockaddr_in6)
|
||||
: sizeof(struct sockaddr_in);
|
||||
*addr_len = ipv6 ? sizeof(struct sockaddr_in6)
|
||||
: sizeof(struct sockaddr_in);
|
||||
void *dst = ipv6 ? &((struct sockaddr_in6 *)out)->sin6_addr
|
||||
: &((struct sockaddr_in *)out)->sin_addr;
|
||||
if (inet_pton(out->ss_family, addr, dst))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user