[ENet-discuss] Long Distance Packet Loss (maybe)?

Alex Milstead alex.milstead at gatech.edu
Fri Jan 15 07:05:25 PST 2010


Hey all,

Just a heads up, (I don't know how reliable this is, exactly, but) I've 
been using a network packet monitoring tool call "wireshark" to monitor 
packets coming back and forth between client and server apps using an 
ENet wrapper I wrote.

I'm using ENet to send a struct back and forth between machines. The 
struct itself isn't very big (only about 10 fields inside), and for the 
longest time sending it to and fro was no big problem. Recently, though, 
I've been testing out the server piece of the app(s) I'm writing, and 
according to wireshark, I'm receiving "Malformed Packets". I see this 
happening pretty frequently between machines when the client and server 
are in the same general (geographical) locale, however I've got a team 
member that is testing the client from Oregon (I'm in Georgia), and some 
seriously screwed up is happening. Every time he sends data, wireshark 
picks up that a packet is coming in, but ENet -never- hits the 
"ENET_EVENT_TYPE_RECEIVE" event on the server host that is servicing the 
connection.

The basic break down of the apps ENet protocols are as follows (sans the 
client connecting to the server for the first time):

Client code:
...

SendData(void *data)
{
    if (connected) // flag set to true when enet_host_connect and 
subsequent (enet_host_service && event.type == ENET_EVENT_TYPE_CONNECT) 
events are true
       ENetPacket *packet = enet_packet_create(struct_ref, 
sizeof(structReferenced), ENET_PACKET_FLAG_RELIABLE);
       enet_peer_send(server, channel, packet);
       enet_host_flush(connection);
}
...

Server Code:
...
 while (enet_host_service(connection, &event, connection_lifetime) >= 0 
&& !quit) {
        switch (event.type) {
            case ENET_EVENT_TYPE_CONNECT:
                cout << "A new client connected!";

                break;
            case ENET_EVENT_TYPE_RECEIVE:
                ProcessPacket(event);
                break;
       }
}
...

The problem appears to be when packets are sent from the client machine 
in Oregon. Like I mentioned, wireshark is telling me that the packet 
actually made it, but the ENET_EVENT_TYPE_RECEIVE -never- occurs. Again, 
I'm not sure how reliable "wireshark" is, but it's telling me that the 
UDP packet being sent is "malformed". This doesn't seem to happen when 
I'm sending from a client machine that is geographically closer to the 
server (e.g. in my home, but sending requests to the frontal IP instead 
of a local IP), although wireshark still seems to report that the 
datagram sent from the closer machine is also sometimes "malformed".


Any ideas on what's happening/going wrong?

Thanks for any help in advance.

Cheers,
Alex



More information about the ENet-discuss mailing list