Well water marks seem to be the way to go.. But before your reply came I saw
that in the library there is an interface

*struct* evbuffer_cb_info {
        size_t orig_size;
        size_t n_added;
        size_t n_deleted;
};
*typedef* *void* (*evbuffer_cb_func)(*struct* evbuffer *buffer,
    *const* *struct* evbuffer_cb_info *info, *void* *arg);

described http://www.wangafu.net/~nickm/libevent-book/Ref7_evbuffer.html


I think this is the right way to do this stuff...


On Wed, Nov 24, 2010 at 6:23 AM, Kelly Brock <ke...@inocode.com> wrote:

> 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 majord...@freehaven.net with
> unsubscribe libevent-users    in the body.
>

Reply via email to