diff options
| author | Mat M <mathew1800@gmail.com> | 2021-05-13 06:42:44 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-13 06:42:44 -0400 |
| commit | 0ef88d4ecb103908aeaba0105767b96ef5e755c4 (patch) | |
| tree | 4b69c3864c8b7c9a9c7a86e6a9724fe58e7dc742 /Source/Core | |
| parent | 24b9a64c1116dee5bb106d8217a42da2951dffa3 (diff) | |
| parent | c21e9909ab1209a5792e9979707e50251c93ada4 (diff) | |
Merge pull request #9705 from Leseratte10/master
Socket: Fix AF_INET6 on non-Windows systems
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/IOS/Network/Socket.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/Source/Core/Core/IOS/Network/Socket.cpp b/Source/Core/Core/IOS/Network/Socket.cpp index 663b3f05dd..3836027006 100644 --- a/Source/Core/Core/IOS/Network/Socket.cpp +++ b/Source/Core/Core/IOS/Network/Socket.cpp @@ -750,12 +750,31 @@ bool WiiSockMan::IsSocketBlocking(s32 wii_fd) const s32 WiiSockMan::NewSocket(s32 af, s32 type, s32 protocol) { - if (af != 2 && af != 23) // AF_INET && AF_INET6 + if (af == 2) + { + // AF_INET == 2 is true on all systems I've seen, + // but it's not guaranteed. Better set this again. + af = AF_INET; + } + else if (af == 23) + { + // AF_INET6 == 23 is only true on Wii and on Windows. + // On other OSes, AF_INET6 can have a different value. + // For example, on Linux it's 10 and on MacOS/iOS it's 30. + af = AF_INET6; + } + else + { + // Neither an AF_INET nor an AF_INET6 socket. + // Unsupported. return -SO_EAFNOSUPPORT; + } + if (protocol != 0) // IPPROTO_IP return -SO_EPROTONOSUPPORT; if (type != 1 && type != 2) // SOCK_STREAM && SOCK_DGRAM return -SO_EPROTOTYPE; + s32 fd = static_cast<s32>(socket(af, type, protocol)); return AddSocket(fd, false); } |
