[ENet-discuss] ENetPeer structure when reconnecting

Marc Rochel marc.rochel at udicom.de
Fri Jun 19 01:29:03 PDT 2009


Hi !

 

Something related was bugging me some time as well. When you try to
connect, after a while, if successful, you get a
ENET_EVENT_TYPE_CONNECT, but you never get a notification when the
connection doesn't get established. Maybe enet keeps trying infinitly
itself? I "solved" the issue for me by checking if some selfdefined
timeout is passed and the call enet_host_destroy. Creating a new one
afterwards and trying to connect again works.

 

Best regards

    Marc

 

 

From: enet-discuss-bounces at cubik.org
[mailto:enet-discuss-bounces at cubik.org] On Behalf Of William Brandt
Sent: Donnerstag, 18. Juni 2009 19:08
To: Discussion of the ENet library
Subject: Re: [ENet-discuss] ENetPeer structure when reconnecting

 

Ruud van Gaal wrote: 

This all sounds familiar. I have this connection scheme with the
following
properties:
- the server may not be online yet
- the client attempts a connection every second or 2, to see if the
server
is already alive
- I only want 1 connection (client<->server)
 
I have a C++ wrapper (class QNClient) which only tracks 1 peer. This
client
class is legacy and only represents 1 link to a server (class QNServer).
For repeated connection attempts, this was no problem in the past
(without
ENet); I sent out some kind of CONNECT packet, and if something came
back,
it was connected.
With the ENet peer, I start an enet_host_connect() with every connection
attempt. If I create an ENet host with only 1 peer, I run out of peers
after
this first connect attempt.
It's a bit awkward, since if I allow more peers in the ENet host,
multiple
peers may connect succesfully. I'll have to drop the surplus of
connections
once the server comes up and it turns out I get multiple
ENET_EVENT_TYPE_CONNECT events.
It seems to work though with 1 peer, I just get a lot of 'out of peer'
error
when trying enet_host_connect(). I haven't tried resetting the peer; I
don't
think I want to since a connect reply may still be incoming and I'd
rather
handle that as usual.
 
Ruud
 
 
  

	-----Oorspronkelijk bericht-----
	Van: enet-discuss-bounces at cubik.org 
	[mailto:enet-discuss-bounces at cubik.org] Namens Daniel Aquino
	Verzonden: Thursday, June 18, 2009 18:13
	Aan: Discussion of the ENet library
	Onderwerp: Re: [ENet-discuss] ENetPeer structure when
reconnecting
	 
	Perhaps as I said you ran out of peers...  So until the 
	callback stack was finished that peer wouldn't be free yet...
	 
	On Wed, Jun 17, 2009 at 11:23 PM, William 
	Brandt<taekvideo at gmail.com> <mailto:taekvideo at gmail.com>  wrote:
	    

		Daniel Aquino wrote:
		 
		>From what i know there is no deleting.  I believe enet 
		      

	will clean up
	    

		the peer after it has told you about the event and you
have had a 
		chance to react.  And the connection function will
return a 
		      

	new peer 
	    

		with no way to re-use the existing peer that I know
of...  
		      

	Which does 
	    

		confuse me a bit in the case of attempting to make a new
connection 
		inside of the disconnection event when there is no more 
		      

	peers left...
	    

		I don't know if in that case it would still consider
that peer as 
		valid resulting in the inability to form a new
connection or if it 
		would end up using that same peer destroying data inside
of it that 
		you may still need...  So I copied any data I needed
from the peer
		object before making the new connection just in case...
I guess
		these questions could be solved easily by looking into
the 
		      

	enet code 
	    

		or setting the peer count to 1 and doing some testing...
		 
		On Wed, Jun 17, 2009 at 2:47 PM, William 
		      

	Brandt<taekvideo at gmail.com> <mailto:taekvideo at gmail.com>  wrote:
	    

		 
		When a user is disconnected from the server and is 
		      

	reconnecting, do I 
	    

		need to get a new ENetPeer object (from the
enet_host_connect() 
		function), or is it possible to use the same one to 
		      

	reconnect?  Also, 
	    

		if I have to get a new one, do I need to delete the old
one (& how)?
		      

...
  

		well what I'm doing now seems to be working...
		the main problem I was having was that
enet_host_connect() was 
		returning NULL when I tried to reconnect.  It seems I
had to 
		explicitly call
		enet_peer_reset() on the old peer object before I
reconnect 
		      

	and get a 
	    

		new peer object.
		      

 
_______________________________________________
ENet-discuss mailing list
ENet-discuss at cubik.org
http://lists.cubik.org/mailman/listinfo/enet-discuss
 
  

You should add a 5000ms delay when you call enet_host_service() to check
for connect events after calling enet_host_connect().  Then if you don't
get a response you can safely assume that the server isn't going to
respond and reset the peer then try again.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cubik.org/pipermail/enet-discuss/attachments/20090619/8863adfd/attachment.htm>


More information about the ENet-discuss mailing list