[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
RE: [Libevent-users] Dynamic changes of read water mark
> > It seems that this can be done with a buffered event which keeps
> changing
> > the read low watermark (twice per message).
Your sample code did not include the watermark part.
May I assume that at the end of the code snippet you would set the low
watermark ?
If I set the low watermark to X, am I guaranteed that the next time I reach
the callback at least X bytes are available ?
Is that also true if I leave some bytes in the buffer at the end of my
processing ?
> > Is this a "proper" way to use buffered events ?
> >
>
> Yes, bufferevents are fine for this, this abstracts some of the hard
> work. I do the same thing in one of my applications. Something along
> the lines of:
>
> struct frame {
> uint16_t something;
> uint16_t length;
> };
>
> size_t frame_length = 4;
>
> buf = bufferevent_get_input(bev);
>
> while (evbuffer_get_length(buf) > 0) {
> unsigned char *data;
> unsigned char *payload;
> struct frame frame;
>
> data = evbuffer_pullup(buf, frame_length);
Is there a good reason to do the pullup before checking the length, or was
that just placed here while you quickly came up with a sample code ?
>
> if (evbuffer_get_length(data) < frame_length) {
> /* we don't have enough data yet to fill in our frame, return
> and wait for more */
> break;
> }
>
> memcpy((char *)&frame.something, data, sizeof(uint16_t));
> memcpy((char *)&frame.length, &data[sizeof(uint16_t)],
> sizeof(uint16_t))/
>
> if ((evbuffer_get_length(buf) - frame_length) < frame.length) {
> /* whole payload hasn't been seen */
> break;
> }
>
> /* drain the header portion from the evbuffer */
> evbuffer_drain(buf, frame_length);
>
> if (!(payload = malloc(frame.length))) {
> perror("malloc");
> return;
> }
>
> evbuffer_remove_buffer(buf, payload, frame.length);
> }
>
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users in the body.