Added support for completely disabling noexcept using MIJIN_TEST_NO_NOEXCEPT (for testing).
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "./detail/net_common.hpp"
|
||||
#include "../detect.hpp"
|
||||
#include "../internal/common.hpp"
|
||||
#include "../util/variant.hpp"
|
||||
|
||||
namespace mijin
|
||||
@@ -10,7 +11,7 @@ namespace mijin
|
||||
namespace
|
||||
{
|
||||
inline constexpr int LISTEN_BACKLOG = 3;
|
||||
StreamError translateErrno() noexcept
|
||||
StreamError translateErrno() MIJIN_NOEXCEPT
|
||||
{
|
||||
switch (errno)
|
||||
{
|
||||
@@ -30,7 +31,7 @@ int readFlags(const ReadOptions& options)
|
||||
#if MIJIN_TARGET_OS == MIJIN_OS_LINUX
|
||||
const int SOCKOPT_ONE = 1;
|
||||
|
||||
bool appendSocketFlags(int handle, int flags) noexcept
|
||||
bool appendSocketFlags(int handle, int flags) MIJIN_NOEXCEPT
|
||||
{
|
||||
const int currentFlags = fcntl(handle, F_GETFL);
|
||||
if (currentFlags < 0)
|
||||
@@ -40,7 +41,7 @@ bool appendSocketFlags(int handle, int flags) noexcept
|
||||
return fcntl(handle, F_SETFL, currentFlags | flags) >= 0;
|
||||
}
|
||||
|
||||
bool removeSocketFlags(int handle, int flags) noexcept
|
||||
bool removeSocketFlags(int handle, int flags) MIJIN_NOEXCEPT
|
||||
{
|
||||
const int currentFlags = fcntl(handle, F_GETFL);
|
||||
if (currentFlags < 0)
|
||||
@@ -50,32 +51,32 @@ bool removeSocketFlags(int handle, int flags) noexcept
|
||||
return fcntl(handle, F_SETFL, currentFlags & ~flags) >= 0;
|
||||
}
|
||||
|
||||
long osRecv(int socket, std::span<std::uint8_t> buffer, int flags)
|
||||
long osRecv(int socket, std::span<std::uint8_t> buffer, int flags) MIJIN_NOEXCEPT
|
||||
{
|
||||
return static_cast<long>(recv(socket, buffer.data(), buffer.size(), flags));
|
||||
}
|
||||
|
||||
long osSend(int socket, std::span<const std::uint8_t> buffer, int flags)
|
||||
long osSend(int socket, std::span<const std::uint8_t> buffer, int flags) MIJIN_NOEXCEPT
|
||||
{
|
||||
return static_cast<long>(send(socket, buffer.data(), buffer.size(), flags));
|
||||
}
|
||||
|
||||
int osCreateSocket(int domain, int type, int protocol)
|
||||
int osCreateSocket(int domain, int type, int protocol) MIJIN_NOEXCEPT
|
||||
{
|
||||
return socket(domain, type, protocol);
|
||||
}
|
||||
|
||||
int osCloseSocket(int socket)
|
||||
int osCloseSocket(int socket) MIJIN_NOEXCEPT
|
||||
{
|
||||
return ::close(socket);
|
||||
}
|
||||
|
||||
bool osIsSocketValid(int socket)
|
||||
bool osIsSocketValid(int socket) MIJIN_NOEXCEPT
|
||||
{
|
||||
return socket >= 0;
|
||||
}
|
||||
|
||||
bool osSetSocketNonBlocking(int socket, bool blocking)
|
||||
bool osSetSocketNonBlocking(int socket, bool blocking) MIJIN_NOEXCEPT
|
||||
{
|
||||
if (blocking)
|
||||
{
|
||||
@@ -95,7 +96,7 @@ thread_local bool gWsaInited = false;
|
||||
class WSAGuard
|
||||
{
|
||||
public:
|
||||
~WSAGuard() noexcept
|
||||
~WSAGuard() MIJIN_NOEXCEPT
|
||||
{
|
||||
if (gWsaInited)
|
||||
{
|
||||
@@ -104,17 +105,17 @@ public:
|
||||
}
|
||||
} thread_local [[maybe_unused]] gWsaGuard;
|
||||
|
||||
long osRecv(SOCKET socket, std::span<std::uint8_t> buffer, int flags)
|
||||
long osRecv(SOCKET socket, std::span<std::uint8_t> buffer, int flags) MIJIN_NOEXCEPT
|
||||
{
|
||||
return recv(socket, reinterpret_cast<char*>(buffer.data()), static_cast<int>(buffer.size()), flags);
|
||||
}
|
||||
|
||||
long osSend(SOCKET socket, std::span<const std::uint8_t> buffer, int flags)
|
||||
long osSend(SOCKET socket, std::span<const std::uint8_t> buffer, int flags) MIJIN_NOEXCEPT
|
||||
{
|
||||
return send(socket, reinterpret_cast<const char*>(buffer.data()), static_cast<int>(buffer.size()), flags);
|
||||
}
|
||||
|
||||
SOCKET osCreateSocket(int addressFamily, int type, int protocol)
|
||||
SOCKET osCreateSocket(int addressFamily, int type, int protocol) MIJIN_NOEXCEPT
|
||||
{
|
||||
if (!detail::initWSA())
|
||||
{
|
||||
@@ -123,17 +124,17 @@ SOCKET osCreateSocket(int addressFamily, int type, int protocol)
|
||||
return socket(addressFamily, type, protocol);
|
||||
}
|
||||
|
||||
int osCloseSocket(SOCKET socket)
|
||||
int osCloseSocket(SOCKET socket) MIJIN_NOEXCEPT
|
||||
{
|
||||
return closesocket(socket);
|
||||
}
|
||||
|
||||
bool osIsSocketValid(SOCKET socket)
|
||||
bool osIsSocketValid(SOCKET socket) MIJIN_NOEXCEPT
|
||||
{
|
||||
return socket != INVALID_SOCKET;
|
||||
}
|
||||
|
||||
bool osSetSocketNonBlocking(SOCKET socket, bool blocking)
|
||||
bool osSetSocketNonBlocking(SOCKET socket, bool blocking) MIJIN_NOEXCEPT
|
||||
{
|
||||
u_long value = blocking ? 0 : 1;
|
||||
return ioctlsocket(socket, FIONBIO, &value) == NO_ERROR;
|
||||
@@ -144,7 +145,7 @@ bool osSetSocketNonBlocking(SOCKET socket, bool blocking)
|
||||
namespace detail
|
||||
{
|
||||
#if MIJIN_TARGET_OS == MIJIN_OS_WINDOWS
|
||||
bool initWSA() noexcept
|
||||
bool initWSA() MIJIN_NOEXCEPT
|
||||
{
|
||||
if (gWsaInited)
|
||||
{
|
||||
@@ -160,20 +161,20 @@ bool initWSA() noexcept
|
||||
return true;
|
||||
}
|
||||
|
||||
StreamError translateWSAError() noexcept
|
||||
StreamError translateWSAError() MIJIN_NOEXCEPT
|
||||
{
|
||||
// TODO
|
||||
return StreamError::UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
StreamError translateWinError(DWORD error) noexcept
|
||||
StreamError translateWinError(DWORD error) MIJIN_NOEXCEPT
|
||||
{
|
||||
// TODO
|
||||
(void) error;
|
||||
return StreamError::UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
StreamError translateWinError() noexcept
|
||||
StreamError translateWinError() MIJIN_NOEXCEPT
|
||||
{
|
||||
return translateWinError(GetLastError());
|
||||
}
|
||||
@@ -327,7 +328,7 @@ StreamFeatures TCPStream::getFeatures()
|
||||
};
|
||||
}
|
||||
|
||||
StreamError TCPStream::open(ip_address_t address, std::uint16_t port) noexcept
|
||||
StreamError TCPStream::open(ip_address_t address, std::uint16_t port) MIJIN_NOEXCEPT
|
||||
{
|
||||
MIJIN_ASSERT(!isOpen(), "Socket is already open.");
|
||||
|
||||
@@ -375,19 +376,19 @@ StreamError TCPStream::open(ip_address_t address, std::uint16_t port) noexcept
|
||||
return StreamError::SUCCESS;
|
||||
}
|
||||
|
||||
void TCPStream::close() noexcept
|
||||
void TCPStream::close() MIJIN_NOEXCEPT
|
||||
{
|
||||
MIJIN_ASSERT(isOpen(), "Socket is not open.");
|
||||
osCloseSocket(handle_);
|
||||
handle_ = INVALID_SOCKET_HANDLE;
|
||||
}
|
||||
|
||||
TCPStream& TCPSocket::getStream() noexcept
|
||||
TCPStream& TCPSocket::getStream() MIJIN_NOEXCEPT
|
||||
{
|
||||
return stream_;
|
||||
}
|
||||
|
||||
StreamError TCPServerSocket::setup(ip_address_t address, std::uint16_t port) noexcept
|
||||
StreamError TCPServerSocket::setup(ip_address_t address, std::uint16_t port) MIJIN_NOEXCEPT
|
||||
{
|
||||
MIJIN_ASSERT(!isListening(), "Socket is already listening.");
|
||||
|
||||
@@ -440,7 +441,7 @@ StreamError TCPServerSocket::setup(ip_address_t address, std::uint16_t port) noe
|
||||
return StreamError::SUCCESS;
|
||||
}
|
||||
|
||||
void TCPServerSocket::close() noexcept
|
||||
void TCPServerSocket::close() MIJIN_NOEXCEPT
|
||||
{
|
||||
MIJIN_ASSERT(isListening(), "Socket is not listening.");
|
||||
|
||||
@@ -448,7 +449,7 @@ void TCPServerSocket::close() noexcept
|
||||
handle_ = INVALID_SOCKET_HANDLE;
|
||||
}
|
||||
|
||||
Task<StreamResult<std::unique_ptr<Socket>>> TCPServerSocket::c_waitForConnection() noexcept
|
||||
Task<StreamResult<std::unique_ptr<Socket>>> TCPServerSocket::c_waitForConnection() MIJIN_NOEXCEPT
|
||||
{
|
||||
while (isListening())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user