From 25636f8db7a86445a390b1b935d3eae30e850923 Mon Sep 17 00:00:00 2001 From: Jordan Schidlowsky Date: Mon, 27 Sep 2021 09:36:57 +0200 Subject: [PATCH] [Net] ENet now sends fragmented packets unreliably too. It used to always send them reliably when transfer mode was unreliable or ordered if the packet size was more then the enet host MTU (1400 bytes by default). This commit also adds a warning when debug is enabled to explain the effects of sending fragmented packets unreliably. --- modules/enet/networked_multiplayer_enet.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/enet/networked_multiplayer_enet.cpp b/modules/enet/networked_multiplayer_enet.cpp index a249d703786..cf6148e9185 100644 --- a/modules/enet/networked_multiplayer_enet.cpp +++ b/modules/enet/networked_multiplayer_enet.cpp @@ -546,9 +546,10 @@ Error NetworkedMultiplayerENet::put_packet(const uint8_t *p_buffer, int p_buffer packet_flags = ENET_PACKET_FLAG_UNSEQUENCED; } channel = SYSCH_UNRELIABLE; + packet_flags |= ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT; } break; case TRANSFER_MODE_UNRELIABLE_ORDERED: { - packet_flags = 0; + packet_flags = ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT; channel = SYSCH_UNRELIABLE; } break; case TRANSFER_MODE_RELIABLE: { @@ -561,6 +562,12 @@ Error NetworkedMultiplayerENet::put_packet(const uint8_t *p_buffer, int p_buffer channel = transfer_channel; } +#ifdef DEBUG_ENABLED + if ((packet_flags & ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT) && p_buffer_size + 8 > ENET_HOST_DEFAULT_MTU) { + WARN_PRINT_ONCE(vformat("Sending %d bytes unrealiably which is above the MTU (%d), this will result in higher packet loss", p_buffer_size + 8, host->mtu)); + } +#endif + Map::Element *E = nullptr; if (target_peer != 0) {