Skip to content

Commit

Permalink
Fix socket address conversion for ipv6
Browse files Browse the repository at this point in the history
  • Loading branch information
jellefoks committed Feb 5, 2025
1 parent 3447517 commit ac3eedf
Showing 1 changed file with 21 additions and 13 deletions.
34 changes: 21 additions & 13 deletions third_party/musl/src/starboard/network/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -177,20 +177,24 @@ int ConvertSocketAddressPosixToSb(const struct sockaddr* address, SbSocketAddres
errno = EINVAL;
return -1;
}
struct sockaddr_in* addr_in = (struct sockaddr_in*)address;
switch (addr_in->sin_family){
case AF_INET:
switch (addr_in->sin_family) {
case AF_INET: {
struct sockaddr_in* addr_in = (struct sockaddr_in*)address;
sbAddress->type = kSbSocketAddressTypeIpv4;
sbAddress->port = addr_in->sin_port;
memcpy(sbAddress->address, &addr_in->sin_addr, kAddressLengthIpv4);
break;
}
#if SB_HAS(IPV6)
case AF_INET6:
case AF_INET6: {
struct sockaddr_in6* addr_in = (struct sockaddr_in6*)address;
sbAddress->type = kSbSocketAddressTypeIpv6;
memcpy(sbAddress->address, &addr_in->sin_addr, kAddressLengthIpv6);
sbAddress->port = addr_in->sin6_port;
memcpy(sbAddress->address, &addr_in->sin6_addr, kAddressLengthIpv6);
break;
}
#endif
}
sbAddress->port = addr_in->sin_port;

return 0;
}
Expand All @@ -200,21 +204,25 @@ int ConvertSocketAddressSbToPosix(const SbSocketAddress* sbAddress, struct socka
errno = EINVAL;
return -1;
}
struct sockaddr_in* addr_in = (struct sockaddr_in*)address;
switch (sbAddress->type){
case kSbSocketAddressTypeIpv4:
switch (sbAddress->type) {
case kSbSocketAddressTypeIpv4: {
struct sockaddr_in* addr_in = (struct sockaddr_in*)address;
addr_in->sin_family = AF_INET;
addr_in->sin_port = sbAddress->port;
memcpy(&addr_in->sin_addr, sbAddress->address, kAddressLengthIpv4);
break;
}
#if SB_HAS(IPV6)
case kSbSocketAddressTypeIpv6:
addr_in->sin_family = AF_INET6;
memcpy(&addr_in->sin_addr, sbAddress->address, kAddressLengthIpv6);
case kSbSocketAddressTypeIpv6: {
struct sockaddr_in6* addr_in = (struct sockaddr_in6*)address;
addr_in->sin6_family = AF_INET6;
addr_in->sin6_port = sbAddress->port;
memcpy(&addr_in->sin6_addr, sbAddress->address, kAddressLengthIpv6);
break;
}
#endif
default:{}
}
addr_in->sin_port = sbAddress->port;

return 0;
}
Expand Down

0 comments on commit ac3eedf

Please sign in to comment.