From 4a1a0e6a38d65a12b50f8d432e62347a3ebda2cc Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Fri, 10 Jan 2025 17:52:38 +0200 Subject: [PATCH] added SetSocketOptions:53: Unreachable code! Unknown level =65535 optname =4608 --- src/core/libraries/network/posix_sockets.cpp | 12 ++++++++++++ src/core/libraries/network/sockets.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/core/libraries/network/posix_sockets.cpp b/src/core/libraries/network/posix_sockets.cpp index bd8ab6406..6ca60fbb4 100644 --- a/src/core/libraries/network/posix_sockets.cpp +++ b/src/core/libraries/network/posix_sockets.cpp @@ -3,6 +3,7 @@ #include #include "net.h" +#include "net_error.h" #include "sockets.h" namespace Libraries::Net { @@ -51,6 +52,17 @@ int PosixSocket::SetSocketOptions(int level, int optname, const void* optval, un case ORBIS_NET_SO_SNDTIMEO: return ConvertReturnErrorCode( setsockopt(sock, level, SO_SNDTIMEO, (const char*)optval, optlen)); + case ORBIS_NET_SO_NBIO: { + if (optlen != sizeof(sockopt_so_nbio)) { + return ORBIS_NET_ERROR_EFAULT; + } + memcpy(&sockopt_so_nbio, optval, optlen); +#ifdef _WIN32 + return ConvertReturnErrorCode(ioctlsocket(sock, FIONBIO, (u_long*)&sockopt_so_nbio)); +#else + return ConvertReturnErrorCode(ioctl(sock, FIONBIO, &sockopt_so_nbio)); +#endif + } } } UNREACHABLE_MSG("Unknown level ={} optname ={}", level, optname); diff --git a/src/core/libraries/network/sockets.h b/src/core/libraries/network/sockets.h index de2b61e85..16c10eedf 100644 --- a/src/core/libraries/network/sockets.h +++ b/src/core/libraries/network/sockets.h @@ -42,6 +42,7 @@ struct Socket { struct PosixSocket : public Socket { net_socket sock; + int sockopt_so_nbio = 0; explicit PosixSocket(int domain, int type, int protocol) : Socket(domain, type, protocol), sock(socket(domain, type, protocol)) {} int SetSocketOptions(int level, int optname, const void* optval, unsigned int optlen) override;