diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 1e6faceee4..4d207369ca 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp @@ -522,8 +522,12 @@ 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 (protocol == Network::Protocol::ICMP || protocol == Network::Protocol::ICMPV6) { + if (0) { + // ...only unix has this issue it seems, ICMP works otherwise fine on win +#ifdef __unix__ + } else if (protocol == Network::Protocol::ICMP || protocol == Network::Protocol::ICMPV6) { descriptor.socket = std::make_shared(); +#endif } else if (room_member && room_member->IsConnected()) { descriptor.socket = std::make_shared(); } else { diff --git a/src/core/internal_network/socket_icmp.cpp b/src/core/internal_network/socket_icmp.cpp index 301c4d1d96..ad250568f9 100644 --- a/src/core/internal_network/socket_icmp.cpp +++ b/src/core/internal_network/socket_icmp.cpp @@ -93,13 +93,17 @@ std::pair IcmpSocket::RecvFrom(int flags, std::span message, Net LOG_DEBUG(Network, "(stubbed) called"); ASSERT(flags == 0); ASSERT(message.size() < std::size_t((std::numeric_limits::max)())); -#ifdef __unix__ +#if !defined(__OPENORBIS__) && (defined(__FreeBSD__) || defined(__linux__)) if (addr) { if (seq_ident.empty()) return {0, Errno::SUCCESS}; // PLEASE DON'T KILL ME, I SWEAR THIS IS LEGITIMATELY THE BEST WAY TO DO IT // IF YOU OPEN socket() GOOGLE WILL STRAIGHT UP IP BAN YOU AFTER 2 HOURS +#ifdef __FreeBSD__ auto const cmd = fmt::format("ping -t 3 -o {}.{}.{}.{}", addr->ip[0], addr->ip[1], addr->ip[2], addr->ip[3]); +#elif defined(__linux__) + auto const cmd = fmt::format("ping -c 1 -W 3 {}.{}.{}.{}", addr->ip[0], addr->ip[1], addr->ip[2], addr->ip[3]); +#endif if (::system(cmd.c_str()) == 0) { std::vector data{ 8,