From f26a3c542dfb39e274f96a018e2dbc7817bad934 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 15 Aug 2026 15:46:13 +0000 Subject: [PATCH] fallback only if it failed --- src/core/hle/service/sockets/bsd.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index b5ffac0300..becb36b3d6 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp @@ -524,18 +524,23 @@ std::pair BSD::SocketImpl(Network::Domain domain, Network:: // TODO: rework this so proxy sockets can be done transparently? -- like what if i need // to browse the internet while playing LDN or something stupid like that? auto room_member = Network::GetRoomMember().lock(); - if (0) { - // ...only unix has this issue it seems, ICMP works otherwise fine on win -#if defined(__unix__) && !defined(__APPLE__) - } else if (protocol == Network::Protocol::ICMP || protocol == Network::Protocol::ICMPV6) { - descriptor.socket = std::make_shared(); -#endif - } else if (room_member && room_member->IsConnected()) { + if ((protocol != Network::Protocol::ICMP && protocol != Network::Protocol::ICMPV6) + && (room_member && room_member->IsConnected())) { descriptor.socket = std::make_shared(); } else { descriptor.socket = std::make_shared(); } auto const bsd_errno = descriptor.socket->Initialize(domain, type, protocol); + +#if defined(__unix__) && !defined(__APPLE__) + // ...only unix has this issue it seems, ICMP works otherwise fine on win + if (bsd_errno != Network::Errno::SUCCESS + && (protocol == Network::Protocol::ICMP || protocol == Network::Protocol::ICMPV6)) { + LOG_WARNING(Network, "Using ICMP emulated socket"); + descriptor.socket = std::make_shared(); + } +#endif + descriptor.is_connection_based = IsConnectionBased(type); #ifdef _WIN32 if (descriptor.is_connection_based && descriptor.socket->fd == INVALID_SOCKET) {