summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorMat M <mathew1800@gmail.com>2021-05-13 06:42:44 -0400
committerGitHub <noreply@github.com>2021-05-13 06:42:44 -0400
commit0ef88d4ecb103908aeaba0105767b96ef5e755c4 (patch)
tree4b69c3864c8b7c9a9c7a86e6a9724fe58e7dc742 /Source
parent24b9a64c1116dee5bb106d8217a42da2951dffa3 (diff)
parentc21e9909ab1209a5792e9979707e50251c93ada4 (diff)
Merge pull request #9705 from Leseratte10/master
Socket: Fix AF_INET6 on non-Windows systems
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/IOS/Network/Socket.cpp21
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);
}