Refactor duplicate code.
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
#include <ws2ipdef.h>
|
#include <ws2ipdef.h>
|
||||||
#include <WS2tcpip.h>
|
#include <WS2tcpip.h>
|
||||||
|
|
||||||
#define SOCKOPT(OPTENUM, OPTLEVEL, OPTNAME) case OPTENUM: optlvl = OPTLEVEL; optnme = OPTNAME; break;
|
#define SOCKOPT(OPTENUM, OPTLEVEL, OPTNAME) case OPTENUM: *level = OPTLEVEL; *name = OPTNAME; break;
|
||||||
|
|
||||||
static_assert(sizeof NetworkSocket::Data >= sizeof SOCKET, "NetworkSocket::Data is not big enough to contains SOCKET !");
|
static_assert(sizeof NetworkSocket::Data >= sizeof SOCKET, "NetworkSocket::Data is not big enough to contains SOCKET !");
|
||||||
static_assert(sizeof NetworkEndPoint::Data >= sizeof sockaddr_in6, "NetworkEndPoint::Data is not big enough to contains sockaddr_in6 !");
|
static_assert(sizeof NetworkEndPoint::Data >= sizeof sockaddr_in6, "NetworkEndPoint::Data is not big enough to contains sockaddr_in6 !");
|
||||||
@@ -100,6 +100,28 @@ static void PrintAddrFromInfo(addrinfoW& info)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void TranslateSockOptToNative(NetworkSocketOption option, int32* level, int32* name)
|
||||||
|
{
|
||||||
|
switch (option)
|
||||||
|
{
|
||||||
|
SOCKOPT(NetworkSocketOption::Debug, SOL_SOCKET, SO_DEBUG)
|
||||||
|
SOCKOPT(NetworkSocketOption::ReuseAddr, SOL_SOCKET, SO_REUSEADDR)
|
||||||
|
SOCKOPT(NetworkSocketOption::KeepAlive, SOL_SOCKET, SO_KEEPALIVE)
|
||||||
|
SOCKOPT(NetworkSocketOption::DontRoute, SOL_SOCKET, SO_DONTROUTE)
|
||||||
|
SOCKOPT(NetworkSocketOption::Broadcast, SOL_SOCKET, SO_BROADCAST)
|
||||||
|
SOCKOPT(NetworkSocketOption::UseLoopback, SOL_SOCKET, SO_USELOOPBACK)
|
||||||
|
SOCKOPT(NetworkSocketOption::Linger, SOL_SOCKET, SO_LINGER)
|
||||||
|
SOCKOPT(NetworkSocketOption::OOBInline, SOL_SOCKET, SO_OOBINLINE)
|
||||||
|
SOCKOPT(NetworkSocketOption::SendBuffer, SOL_SOCKET, SO_SNDBUF)
|
||||||
|
SOCKOPT(NetworkSocketOption::RecvBuffer, SOL_SOCKET, SO_RCVBUF)
|
||||||
|
SOCKOPT(NetworkSocketOption::SendTimeout, SOL_SOCKET, SO_SNDTIMEO)
|
||||||
|
SOCKOPT(NetworkSocketOption::RecvTimeout, SOL_SOCKET, SO_RCVTIMEO)
|
||||||
|
SOCKOPT(NetworkSocketOption::Error, SOL_SOCKET, SO_ERROR)
|
||||||
|
SOCKOPT(NetworkSocketOption::NoDelay, IPPROTO_TCP, TCP_NODELAY)
|
||||||
|
SOCKOPT(NetworkSocketOption::IPv6Only, IPPROTO_IPV6, IPV6_V6ONLY)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool Win32Network::Init()
|
bool Win32Network::Init()
|
||||||
{
|
{
|
||||||
if (WSAStartup(MAKEWORD(2, 0), &_wsaData) != 0)
|
if (WSAStartup(MAKEWORD(2, 0), &_wsaData) != 0)
|
||||||
@@ -159,24 +181,7 @@ bool Win32Network::SetSocketOption(NetworkSocket& socket, NetworkSocketOption op
|
|||||||
int32 optlvl = 0;
|
int32 optlvl = 0;
|
||||||
int32 optnme = 0;
|
int32 optnme = 0;
|
||||||
|
|
||||||
switch (option)
|
TranslateSockOptToNative(option, &optlvl, &optnme);
|
||||||
{
|
|
||||||
SOCKOPT(NetworkSocketOption::Debug, SOL_SOCKET, SO_DEBUG)
|
|
||||||
SOCKOPT(NetworkSocketOption::ReuseAddr, SOL_SOCKET, SO_REUSEADDR)
|
|
||||||
SOCKOPT(NetworkSocketOption::KeepAlive, SOL_SOCKET, SO_KEEPALIVE)
|
|
||||||
SOCKOPT(NetworkSocketOption::DontRoute, SOL_SOCKET, SO_DONTROUTE)
|
|
||||||
SOCKOPT(NetworkSocketOption::Broadcast, SOL_SOCKET, SO_BROADCAST)
|
|
||||||
SOCKOPT(NetworkSocketOption::UseLoopback, SOL_SOCKET, SO_USELOOPBACK)
|
|
||||||
SOCKOPT(NetworkSocketOption::Linger, SOL_SOCKET, SO_LINGER)
|
|
||||||
SOCKOPT(NetworkSocketOption::OOBInline, SOL_SOCKET, SO_OOBINLINE)
|
|
||||||
SOCKOPT(NetworkSocketOption::SendBuffer, SOL_SOCKET, SO_SNDBUF)
|
|
||||||
SOCKOPT(NetworkSocketOption::RecvBuffer, SOL_SOCKET, SO_RCVBUF)
|
|
||||||
SOCKOPT(NetworkSocketOption::SendTimeout, SOL_SOCKET, SO_SNDTIMEO)
|
|
||||||
SOCKOPT(NetworkSocketOption::RecvTimeout, SOL_SOCKET, SO_RCVTIMEO)
|
|
||||||
SOCKOPT(NetworkSocketOption::Error, SOL_SOCKET, SO_ERROR)
|
|
||||||
SOCKOPT(NetworkSocketOption::NoDelay, IPPROTO_TCP, TCP_NODELAY)
|
|
||||||
SOCKOPT(NetworkSocketOption::IPv6Only, IPPROTO_IPV6, IPV6_V6ONLY)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (setsockopt(*(SOCKET*)socket.Data, optlvl, optnme, (char*)&value, sizeof value) == SOCKET_ERROR)
|
if (setsockopt(*(SOCKET*)socket.Data, optlvl, optnme, (char*)&value, sizeof value) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
@@ -199,23 +204,8 @@ bool Win32Network::GetSocketOption(NetworkSocket& socket, NetworkSocketOption op
|
|||||||
int32 optlvl = 0;
|
int32 optlvl = 0;
|
||||||
int32 optnme = 0;
|
int32 optnme = 0;
|
||||||
|
|
||||||
switch (option)
|
TranslateSockOptToNative(option, &optlvl, &optnme);
|
||||||
{
|
|
||||||
SOCKOPT(NetworkSocketOption::Debug, SOL_SOCKET, SO_DEBUG)
|
|
||||||
SOCKOPT(NetworkSocketOption::ReuseAddr, SOL_SOCKET, SO_REUSEADDR)
|
|
||||||
SOCKOPT(NetworkSocketOption::KeepAlive, SOL_SOCKET, SO_KEEPALIVE)
|
|
||||||
SOCKOPT(NetworkSocketOption::DontRoute, SOL_SOCKET, SO_DONTROUTE)
|
|
||||||
SOCKOPT(NetworkSocketOption::Broadcast, SOL_SOCKET, SO_BROADCAST)
|
|
||||||
SOCKOPT(NetworkSocketOption::UseLoopback, SOL_SOCKET, SO_USELOOPBACK)
|
|
||||||
SOCKOPT(NetworkSocketOption::Linger, SOL_SOCKET, SO_LINGER)
|
|
||||||
SOCKOPT(NetworkSocketOption::OOBInline, SOL_SOCKET, SO_OOBINLINE)
|
|
||||||
SOCKOPT(NetworkSocketOption::SendBuffer, SOL_SOCKET, SO_SNDBUF)
|
|
||||||
SOCKOPT(NetworkSocketOption::RecvBuffer, SOL_SOCKET, SO_RCVBUF)
|
|
||||||
SOCKOPT(NetworkSocketOption::SendTimeout, SOL_SOCKET, SO_SNDTIMEO)
|
|
||||||
SOCKOPT(NetworkSocketOption::RecvTimeout, SOL_SOCKET, SO_RCVTIMEO)
|
|
||||||
SOCKOPT(NetworkSocketOption::Error, SOL_SOCKET, SO_ERROR)
|
|
||||||
SOCKOPT(NetworkSocketOption::NoDelay, IPPROTO_TCP, TCP_NODELAY)
|
|
||||||
}
|
|
||||||
int32 size;
|
int32 size;
|
||||||
if (getsockopt(*(SOCKET*)socket.Data, optlvl, optnme, (char*)value, &size) == SOCKET_ERROR)
|
if (getsockopt(*(SOCKET*)socket.Data, optlvl, optnme, (char*)value, &size) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user