[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.
This commit is contained in:
Jordan Schidlowsky 2021-09-27 09:36:57 +02:00 committed by Fabio Alessandrelli
parent 8fb06b45d1
commit 25636f8db7
1 changed files with 8 additions and 1 deletions

View File

@ -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<int, ENetPeer *>::Element *E = nullptr;
if (target_peer != 0) {