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

Lee Salzman lsalzman1 at cox.net
Fri Jan 15 08:28:32 PST 2010


Are you regularly calling enet_host_service on the client?

Lee

Alex Milstead wrote:
> 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