diff --git a/src/core/internal_network/socket_icmp.cpp b/src/core/internal_network/socket_icmp.cpp index fa646028ce..b74c555ce6 100644 --- a/src/core/internal_network/socket_icmp.cpp +++ b/src/core/internal_network/socket_icmp.cpp @@ -104,11 +104,13 @@ std::pair IcmpSocket::RecvFrom(int flags, std::span message, Net return {0, Errno::E_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 - auto const rcv_timeout = std::max(rcv_timeo.tv_sec, 1); + auto rcv_time = f64(std::min(rcv_timeo.tv_sec, 600)) + f64(std::min(rcv_timeo.tv_usec, 1000000)) * f64(1.0 / 1000000.0); + if (!std::isfinite(rcv_time) || std::isnan(rcv_time)) + rcv_time = 1.0; #ifdef __FreeBSD__ - auto const cmd = fmt::format("ping -t {} -o {}.{}.{}.{}", rcv_timeout, addr->ip[0], addr->ip[1], addr->ip[2], addr->ip[3]); + auto const cmd = fmt::format("ping -W {} -o {}.{}.{}.{}", rcv_time, addr->ip[0], addr->ip[1], addr->ip[2], addr->ip[3]); #elif defined(__linux__) - auto const cmd = fmt::format("ping -c 1 -W {} {}.{}.{}.{}", rcv_timeout, addr->ip[0], addr->ip[1], addr->ip[2], addr->ip[3]); + auto const cmd = fmt::format("ping -W {} -c 1 {}.{}.{}.{}", rcv_time, addr->ip[0], addr->ip[1], addr->ip[2], addr->ip[3]); #endif if (::system(cmd.c_str()) == 0) { std::vector data{