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);