diff --git a/Source/Engine/Platform/Base/NetworkBase.cpp b/Source/Engine/Platform/Base/NetworkBase.cpp index 06f297cc1..6ba5208f8 100644 --- a/Source/Engine/Platform/Base/NetworkBase.cpp +++ b/Source/Engine/Platform/Base/NetworkBase.cpp @@ -2,7 +2,7 @@ #include "NetworkBase.h" -bool NetworkBase::CreateSocket(NetworkSocket& socket, NetworkProtocolType proto, NetworkIPVersion ipv) +bool NetworkBase::CreateSocket(NetworkSocket& socket, NetworkProtocol proto, NetworkIPVersion ipv) { return true; } diff --git a/Source/Engine/Platform/Base/NetworkBase.h b/Source/Engine/Platform/Base/NetworkBase.h index 6e6821ab4..e5ad03f98 100644 --- a/Source/Engine/Platform/Base/NetworkBase.h +++ b/Source/Engine/Platform/Base/NetworkBase.h @@ -9,7 +9,7 @@ API_INJECT_CPP_CODE("#include \"Engine/Platform/Network.h\""); #define SOCKGROUP_MAXCOUNT 64 #define SOCKGROUP_ITEMSIZE 16 -enum class FLAXENGINE_API NetworkProtocolType +enum class FLAXENGINE_API NetworkProtocol { /// Not specified. Undefined, @@ -31,7 +31,7 @@ enum class FLAXENGINE_API NetworkIPVersion struct FLAXENGINE_API NetworkSocket { - NetworkProtocolType Protocol = NetworkProtocolType::Undefined; + NetworkProtocol Protocol = NetworkProtocol::Undefined; NetworkIPVersion IPVersion = NetworkIPVersion::Undefined; byte Data[8] = {}; }; @@ -74,8 +74,10 @@ enum class FLAXENGINE_API NetworkSocketOption Error, /// Enables the Nagle algorithm for TCP sockets. NoDelay, - /// Enables IPv6 communication only for TCP socket. + /// Enables IPv6/Ipv4 dual-stacking, UDP/TCP. IPv6Only, + /// Retrieve the current path MTU, the socket must be connected UDP/TCP. + Mtu }; struct FLAXENGINE_API NetworkSocketState @@ -103,7 +105,7 @@ public: /// The protocol. /// The ip version. /// Returns true on error, otherwise false. - static bool CreateSocket(NetworkSocket& socket, NetworkProtocolType proto, NetworkIPVersion ipv); + static bool CreateSocket(NetworkSocket& socket, NetworkProtocol proto, NetworkIPVersion ipv); /// /// Closes native socket. diff --git a/Source/Engine/Platform/Win32/Win32Network.cpp b/Source/Engine/Platform/Win32/Win32Network.cpp index 2da68957b..38b99a25e 100644 --- a/Source/Engine/Platform/Win32/Win32Network.cpp +++ b/Source/Engine/Platform/Win32/Win32Network.cpp @@ -132,16 +132,17 @@ static void TranslateSockOptToNative(NetworkSocketOption option, int32* level, i SOCKOPT(NetworkSocketOption::Error, SOL_SOCKET, SO_ERROR) SOCKOPT(NetworkSocketOption::NoDelay, IPPROTO_TCP, TCP_NODELAY) SOCKOPT(NetworkSocketOption::IPv6Only, IPPROTO_IPV6, IPV6_V6ONLY) + SOCKOPT(NetworkSocketOption::Mtu, IPPROTO_IP , IP_MTU) } } -bool Win32Network::CreateSocket(NetworkSocket& socket, NetworkProtocolType proto, NetworkIPVersion ipv) +bool Win32Network::CreateSocket(NetworkSocket& socket, NetworkProtocol proto, NetworkIPVersion ipv) { socket.Protocol = proto; socket.IPVersion = ipv; const uint8 family = socket.IPVersion == NetworkIPVersion::IPv6 ? AF_INET6 : AF_INET; - const uint8 stype = socket.Protocol == NetworkProtocolType::Tcp ? SOCK_STREAM : SOCK_DGRAM; - const uint8 prot = socket.Protocol == NetworkProtocolType::Tcp ? IPPROTO_TCP : IPPROTO_UDP; + const uint8 stype = socket.Protocol == NetworkProtocol::Tcp ? SOCK_STREAM : SOCK_DGRAM; + const uint8 prot = socket.Protocol == NetworkProtocol::Tcp ? IPPROTO_TCP : IPPROTO_UDP; SOCKET sock; if ((sock = ::socket(family, stype, prot)) == INVALID_SOCKET) @@ -259,7 +260,7 @@ bool Win32Network::Listen(NetworkSocket& socket, uint16 queueSize) bool Win32Network::Accept(NetworkSocket& serverSock, NetworkSocket& newSock, NetworkEndPoint& newEndPoint) { - if (serverSock.Protocol != NetworkProtocolType::Tcp) + if (serverSock.Protocol != NetworkProtocol::Tcp) { LOG(Warning, "Can't accept connection on UDP socket! Socket : {0}", *(SOCKET*)serverSock.Data); return true; @@ -372,7 +373,7 @@ int32 Win32Network::WriteSocket(NetworkSocket socket, byte* data, uint32 length, return -1; } uint32 size; - if (endPoint == nullptr && socket.Protocol == NetworkProtocolType::Tcp) + if (endPoint == nullptr && socket.Protocol == NetworkProtocol::Tcp) { if ((size = send(*(SOCKET*)socket.Data, (const char*)data, length, 0)) == SOCKET_ERROR) { @@ -380,7 +381,7 @@ int32 Win32Network::WriteSocket(NetworkSocket socket, byte* data, uint32 length, return -1; } } - else if (endPoint != nullptr && socket.Protocol == NetworkProtocolType::Udp) + else if (endPoint != nullptr && socket.Protocol == NetworkProtocol::Udp) { if ((size = sendto(*(SOCKET*)socket.Data, (const char*)data, length, 0, (const sockaddr*)endPoint->Data, GetAddrSizeFromEP(*endPoint))) == SOCKET_ERROR) { diff --git a/Source/Engine/Platform/Win32/Win32Network.h b/Source/Engine/Platform/Win32/Win32Network.h index b0e313056..7a1aaabbf 100644 --- a/Source/Engine/Platform/Win32/Win32Network.h +++ b/Source/Engine/Platform/Win32/Win32Network.h @@ -13,7 +13,7 @@ class FLAXENGINE_API Win32Network : public NetworkBase public: // [NetworkBase] - static bool CreateSocket(NetworkSocket& socket, NetworkProtocolType proto, NetworkIPVersion ipv); + static bool CreateSocket(NetworkSocket& socket, NetworkProtocol proto, NetworkIPVersion ipv); static bool DestroySocket(NetworkSocket& socket); static bool SetSocketOption(NetworkSocket& socket, NetworkSocketOption option, bool value); static bool SetSocketOption(NetworkSocket& socket, NetworkSocketOption option, int32 value);