Skip to content

Instantly share code, notes, and snippets.

@Zerolean
Last active July 23, 2020 05:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Zerolean/11ac0f63c61cc24cb5e68722fc95989f to your computer and use it in GitHub Desktop.
Save Zerolean/11ac0f63c61cc24cb5e68722fc95989f to your computer and use it in GitHub Desktop.
ENet transmission logic issue
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include "enet.h"
uint8_t payloadBelowMTU[64];
uint8_t payloadBeyondMTU[2048];
int32_t serverSmallPacketsSent;
int32_t serverBigPacketsSent;
int32_t serverSmallPacketsReceived;
int32_t serverBigPacketsReceived;
int32_t clientSmallPacketsSent;
int32_t clientBigPacketsSent;
int32_t clientSmallPacketsReceived;
int32_t clientBigPacketsReceived;
void enqueue_packets(ENetPeer* peer) {
ENetPacket* packet = NULL;
packet = enet_packet_create(payloadBelowMTU, sizeof(payloadBelowMTU), 0);
enet_peer_send(peer, 0, packet);
packet = enet_packet_create(payloadBeyondMTU, sizeof(payloadBeyondMTU), 0);
enet_peer_send(peer, 0, packet);
}
int main(void) {
enet_initialize();
ENetAddress address = { 0 };
address.port = 9500;
ENetHost* server = enet_host_create(&address, 1, 2, 0, 0);
ENetHost* client = enet_host_create(NULL, 1, 0, 0, 0);
enet_address_set_host_ip(&address, "127.0.0.1");
ENetPeer* peer = enet_host_connect(client, &address, 2, 0);
while (true) {
// Server
{
ENetEvent event = { 0 };
bool polled = false;
while (!polled) {
if (enet_host_check_events(server, &event) <= 0) {
if (enet_host_service(server, &event, 0) <= 0)
break;
polled = true;
}
switch (event.type) {
case ENET_EVENT_TYPE_RECEIVE: {
enqueue_packets(event.peer);
serverSmallPacketsSent++;
serverBigPacketsSent++;
if (event.packet->dataLength == sizeof(payloadBelowMTU)) {
serverSmallPacketsReceived++;
printf("[Server] Packet below MTU received: %i of %i\n", serverSmallPacketsReceived, clientSmallPacketsSent);
} else if (event.packet->dataLength == sizeof(payloadBeyondMTU)) {
serverBigPacketsReceived++;
printf("[Server] Packet beyond MTU received: %i of %i\n", serverBigPacketsReceived, clientBigPacketsSent);
}
enet_packet_destroy(event.packet);
break;
}
default:
break;
}
}
}
// Client
{
ENetEvent event = { 0 };
bool polled = false;
while (!polled) {
if (enet_host_check_events(client, &event) <= 0) {
if (enet_host_service(client, &event, 0) <= 0)
break;
polled = true;
}
switch (event.type) {
case ENET_EVENT_TYPE_RECEIVE: {
if (event.packet->dataLength == sizeof(payloadBelowMTU)) {
clientSmallPacketsReceived++;
printf("[Client] Packet below MTU received: %i of %i\n", clientSmallPacketsReceived, serverSmallPacketsSent);
} else if (event.packet->dataLength == sizeof(payloadBeyondMTU)) {
clientBigPacketsReceived++;
printf("[Client] Packet beyond MTU received: %i of %i\n", clientBigPacketsReceived, serverBigPacketsSent);
}
enet_packet_destroy(event.packet);
break;
}
default:
break;
}
}
enqueue_packets(peer);
clientSmallPacketsSent++;
clientBigPacketsSent++;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment