Hi,

I want to write a little app that needs to automatically discover existing
peers inside a LAN.

Each instance launches one host that accepts a given number of peers. Then
it attempts to connect to the ENET_BROADCAST address. Since new hosts can
appear at random, a new connection attempt is made each second. Thus after
a while every peer should connect to every existing host in the LAN.

Now let's say I start with two hosts A and B with 10 peers each.

In vanilla ENet implementation, each connection attempt issued by host A
will bind itself to host B, resulting in all peers on a given host
connected to the other host. I have changed ENet code as follows so that
when several connection attempts are issues by host A, only one can ever
succeed with host B:

in enet_protocol_handle_connect()
{
   ...
    for (currentPeer = host -> peers;
         currentPeer < & host -> peers [host -> peerCount];
         ++ currentPeer)
    {
        if (currentPeer -> state != ENET_PEER_STATE_DISCONNECTED &&
            currentPeer -> address.host == host -> receivedAddress.host &&
            currentPeer -> address.port == host -> receivedAddress.port /*&&
            currentPeer -> connectID == command -> connect.connectID*/) //
THIS PART IS DISABLED TO PREVENT MULTIPLE CONNECTIONS BETWEEN THE SAME HOSTS
          return NULL;
    }
   ...
}

However, this is not enough: I observe that host A will only bind one peer
to host B successfully, but host B will also successfully bind one peer to
host A, thus resulting in hosts A and B having each 2 peers connected to
their counterpart. How can I prevent this?

And more generally, what is the interest of authorizing several peers of a
given host to connect to another host?

Regards,


-- 
Benoit.
_______________________________________________
ENet-discuss mailing list
[email protected]
http://lists.cubik.org/mailman/listinfo/enet-discuss

Reply via email to