Just a small addition... The erroneous case 2. is missing the first line: host.c:enet_host_connect:250: peer 0x7f4e604d1a10: connecting to port 48418
The last lines, starting with ">>>", of both cases are "my" connect callback, being called with the argument supplied to ENetPeer instance created after enet_host_connect() call. On Wed, Nov 27, 2013 at 4:15 PM, Krasimir Marinov <[email protected]> wrote: > I've been load testing an application, mainly based on ENet, and noticed > erroneous behaviour for some of the connection being initiated. > > The test is performed on localhost and perform ~60K connections sending ~ > 120K messages. > > The error is that initiating connection to let's say port X I got > confirmation (ENet connected callback) for port Y. > Here are log traces that visualise the sequence of events under which the > behaviour is observed: > > 1. Correct connect: > host.c:enet_host_connect:250: peer 0x7f4e604d1a10: connecting to port 40041 > protocol.c:enet_protocol_handle_incoming_commands:1078: peer > 0x7f4e604d1a10: port 40041 > protocol.c:enet_protocol_handle_incoming_commands:1127: peer > 0x7f4e604d1a10: command ENET_PROTOCOL_COMMAND_VERIFY_CONNECT > >>>2f00000000000000000000000000000000000000000000000000000000000000<00000000>:(conn > 0x7f4dc8030190, peer 0x7f4e604d1a10): connected to port 40041 > > 2. Incorrect connect: > protocol.c:enet_protocol_handle_incoming_commands:1078: peer > 0x7f4e604d1a10: port 48418 > protocol.c:enet_protocol_handle_incoming_commands:1133: peer > 0x7f4e604d1a10: command ENET_PROTOCOL_COMMAND_DISCONNECT > peer.c:enet_peer_reset:372: peer 0x7f4e604d1a10 > protocol.c:enet_protocol_handle_incoming_commands:1078: peer > 0x7f4e604d1a10: port 56265 > protocol.c:enet_protocol_handle_incoming_commands:1112: peer > 0x7f4e604d1a10: command ENET_PROTOCOL_COMMAND_ACKNOWLEDGE > protocol.c:enet_protocol_handle_incoming_commands:1145: peer > 0x7f4e604d1a10: command ENET_PROTOCOL_COMMAND_SEND_RELIABLE > >>>2f00000000000000000000000000000000000000000000000000000000000000<00000000>:(conn > 0x7f4dc800ac00, peer 0x7f4e604d1a10): connected to port 56265 > > What happens, in 2., is that a peer that I've just created to connect > receives an "unexpected" disconnect message and resets the peer, > peer.c:enet_peer_reset:372: peer 0x7f4e604d1a10, which doesn't clear the > user supplied data (ENetPeer->data) and when the peer is reused I get > incorrect data attached to it. > > I've applied the following patch to protocol.c, which seems to work. > Unfortunately I'm unable to predict all positive/negative consequences of > it, so I'm asking for another opinion/ideas :). Here is the patch (simply > skip processing disconnect messages when in state CONNECTING): > > protocol.c > 817c817,818 > < if (peer -> state == ENET_PEER_STATE_DISCONNECTED || peer -> state > == ENET_PEER_STATE_ZOMBIE || peer -> state == > ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT) > --- > > if (peer -> state == ENET_PEER_STATE_DISCONNECTED || peer -> state > == ENET_PEER_STATE_ZOMBIE || peer -> state == > ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT > > || peer->state == ENET_PEER_STATE_CONNECTING) > > > Regards, > Krasi >
_______________________________________________ ENet-discuss mailing list [email protected] http://lists.cubik.org/mailman/listinfo/enet-discuss
