[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

RE: [Libevent-users] Closing bufferevents sockets from the server side



Hi Sid,

> Sorry that got posted by mistake in the wrong thread... here it is
> again...
> 
> 
> 	Hi,
> 	I am using libevent 2.03 alpha 1 to create an app
> <https://gist.github.com/712976> . The app structure is as follows:
> 
> 	A C++ app wraps lib event to listen on a domain socket. I use
> buffered events. As you can see in the post, the post above is a simple
> server that loops over a set of docs and creates many connections to this
> server.
> 
> 	I am new to this so please spare my flaky concepts, I want to
> clarify my doubt
> 	1) I am using a buffered event that uses sockets as its underlying
> transport means. Everytime a connection is received a connection handler
> forms an eventbuffer, attaches a write handler and a eventcb handler.
> 
> 	2) I recieve some data from the client, I read a line process it and
> write it onto the output buffer of the bufferevent object.
> 
> 	The problem: Now I want to just flush this buffer and close the
> underlying transport(socket) after data has been flushed. I will call the
> evbuffer_add only once for each line recieved and after that no more data
> will be written to that specific o/p buffer.
> 	So at this point i know exactly how much data to write. I need to
> reliably close this connection after all these bytes are out. How to
> achieve this?

	I just went through this a couple weeks ago myself.  So the trick
here is using bufferevent_setwatermark correctly.  After you add the last of
the data to the outgoing evbuffer you want to call the
bufferevent_setwatermark with 1 and 0 on the write direction.  In this way,
the next time the write callback is hit you know all the data has been
written and calling shutdown is safe.  I typically change the watermarks and
the callback at the same time and it has worked like a charm so far.

	If that does not make complete sense, I'm going to be coding up a
quick example for Nick to post with a little howto I wrote up which should
demonstrate this fairly clearly.

KB

***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.