<div dir="ltr">It's unlikely that the client will reuse the same outgoing port on multiple reconnects in the real world.  Once you add NATs  to the picture things get much messier than an internal network.  That said, I had to do something similar but different (Allow the same enet peer ID from any ip/port) to handle the case of a network connection migrating from cellular to wifi.  In turn though I had to add application layer security to prevent spoofing/replays.</div>

<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jul 31, 2013 at 6:46 AM, Patrick Klos <span dir="ltr"><<a href="mailto:pklos@lauferwind.com" target="_blank">pklos@lauferwind.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello ENet mailing list,<br>
<br>
I am new to ENet and have been tasked with learning how it works in our environment.<br>
<br>
After running some packet traces, I noticed that when our "server" uses enet_host_broadcast(), it would sometimes send the broadcasted packet to a given "client" peer twice (with different sequence numbers).  I tracked it down to the fact that the client timed out the server, the client uses enet_peer_reset() to discard the apparently broken connection, and then used enet_host_connect() to reconnect to the server.  The problem appears when the server accepts the new connection for the client while still maintaining the old connection for the client.  This happens because the new connection has a different "connectID" value, so enet_protocol_handle_connect() [protocol.c line 297] doesn't associate the new connection with old connection using the same IP address and port.<br>


<br>
Before I jump to conclusions, let me ask is there any scenario where ENet would want to maintain more than connection between a pair of IP addresses and ports?  Could there be a legitimate use for setting up more than one ENet connection between a single client and server?<br>


<br>
And if the answer to the previous question is NO, would there be any harm in adding code to enet_protocol_handle_connect() such that if it runs into a peer that uses the same IP address and port (but obviously a different connectID) that the new connection is coming in on, enet_protocol_handle_connect() would immediately reset the old peer and then proceed let the new peer be created?<br>


<br>
Perhaps changing this: (starting at line 290)<br>
<br>
    for (currentPeer = host -> peers;<br>
         currentPeer < & host -> peers [host -> peerCount];<br>
         ++ currentPeer)<br>
    {<br>
        if (currentPeer -> state != ENET_PEER_STATE_DISCONNECTED &&<br>
            currentPeer -> address.host == host -> receivedAddress.host &&<br>
            currentPeer -> address.port == host -> receivedAddress.port &&<br>
            currentPeer -> connectID == command -> connect.connectID)<br>
          return NULL;<br>
    }<br>
<br>
To this?<br>
<br>
    for (currentPeer = host -> peers;<br>
         currentPeer < & host -> peers [host -> peerCount];<br>
         ++ currentPeer)<br>
    {<br>
        if (currentPeer -> state != ENET_PEER_STATE_DISCONNECTED &&<br>
            currentPeer -> address.host == host -> receivedAddress.host &&<br>
            currentPeer -> address.port == host -> receivedAddress.port)<br>
        {<br>
            // if using the same connectID, behave like before<br>
            if (currentPeer -> connectID == command -> connect.connectID)<br>
                return NULL;<br>
<br>
            // new connection from existing peer - reset the existing connection now<br>
            enet_peer_reset(currentPeer);<br>
<br>
            // we can stop looking since we won't find another match<br>
            break;<br>
        }<br>
    }<br>
<br>
Thanks,<br>
<br>
Patrick<br>
<br>
______________________________<u></u>_________________<br>
ENet-discuss mailing list<br>
<a href="mailto:ENet-discuss@cubik.org" target="_blank">ENet-discuss@cubik.org</a><br>
<a href="http://lists.cubik.org/mailman/listinfo/enet-discuss" target="_blank">http://lists.cubik.org/<u></u>mailman/listinfo/enet-discuss</a><br>
</blockquote></div><br></div>