mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-12 13:58:58 -04:00
allow setting an event base for bufferevents; from phil oleson
svn:r199
This commit is contained in:
parent
6717cf313a
commit
f296e6336a
20
evbuffer.c
20
evbuffer.c
@ -226,7 +226,12 @@ bufferevent_new(int fd, evbuffercb readcb, evbuffercb writecb,
|
|||||||
|
|
||||||
bufev->cbarg = cbarg;
|
bufev->cbarg = cbarg;
|
||||||
|
|
||||||
bufev->enabled = EV_READ | EV_WRITE;
|
/*
|
||||||
|
* Set to EV_WRITE so that using bufferevent_write is going to
|
||||||
|
* trigger a callback. Reading needs to be explicitly enabled
|
||||||
|
* because otherwise no data will be available.
|
||||||
|
*/
|
||||||
|
bufev->enabled = EV_WRITE;
|
||||||
|
|
||||||
return (bufev);
|
return (bufev);
|
||||||
}
|
}
|
||||||
@ -372,3 +377,16 @@ bufferevent_setwatermark(struct bufferevent *bufev, short events,
|
|||||||
bufferevent_read_pressure_cb(bufev->input,
|
bufferevent_read_pressure_cb(bufev->input,
|
||||||
0, EVBUFFER_LENGTH(bufev->input), bufev);
|
0, EVBUFFER_LENGTH(bufev->input), bufev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
bufferevent_base_set(struct event_base *base, struct bufferevent *bufev)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
|
||||||
|
res = event_base_set(base, &bufev->ev_read);
|
||||||
|
if (res == -1)
|
||||||
|
return (res);
|
||||||
|
|
||||||
|
res = event_base_set(base, &bufev->ev_write);
|
||||||
|
return (res);
|
||||||
|
}
|
||||||
|
32
event.3
32
event.3
@ -64,6 +64,7 @@
|
|||||||
.Nm bufferevent_enable ,
|
.Nm bufferevent_enable ,
|
||||||
.Nm bufferevent_disable ,
|
.Nm bufferevent_disable ,
|
||||||
.Nm bufferevent_settimeout ,
|
.Nm bufferevent_settimeout ,
|
||||||
|
.Nm bufferevent_base_set ,
|
||||||
.Nm evbuffer_new ,
|
.Nm evbuffer_new ,
|
||||||
.Nm evbuffer_free ,
|
.Nm evbuffer_free ,
|
||||||
.Nm evbuffer_add ,
|
.Nm evbuffer_add ,
|
||||||
@ -147,6 +148,8 @@
|
|||||||
.Fn "bufferevent_disable" "struct bufferevent *bufev" "short event"
|
.Fn "bufferevent_disable" "struct bufferevent *bufev" "short event"
|
||||||
.Ft void
|
.Ft void
|
||||||
.Fn "bufferevent_settimeout" "struct bufferevent *bufev" "int timeout_read" "int timeout_write"
|
.Fn "bufferevent_settimeout" "struct bufferevent *bufev" "int timeout_read" "int timeout_write"
|
||||||
|
.Ft int
|
||||||
|
.Fn "bufferevent_base_set" "struct event_base *base" "struct bufferevent *bufev"
|
||||||
.Ft "struct evbuffer *"
|
.Ft "struct evbuffer *"
|
||||||
.Fn "evbuffer_new" "void"
|
.Fn "evbuffer_new" "void"
|
||||||
.Ft void
|
.Ft void
|
||||||
@ -443,14 +446,18 @@ This event base can be used in conjunction with calls to
|
|||||||
.Fn event_base_set ,
|
.Fn event_base_set ,
|
||||||
.Fn event_base_dispatch ,
|
.Fn event_base_dispatch ,
|
||||||
.Fn event_base_loop ,
|
.Fn event_base_loop ,
|
||||||
|
.Fn event_base_loopexit ,
|
||||||
and
|
and
|
||||||
.Fn event_base_loopexit .
|
.Fn bufferevent_base_set .
|
||||||
.Fn event_base_set
|
.Fn event_base_set
|
||||||
should be called after preparing an event with
|
should be called after preparing an event with
|
||||||
.Fn event_set ,
|
.Fn event_set ,
|
||||||
as
|
as
|
||||||
.Fn event_set
|
.Fn event_set
|
||||||
assigns the provided event to the most recently created event base.
|
assigns the provided event to the most recently created event base.
|
||||||
|
.Fn bufferevent_base_set
|
||||||
|
should be called after preparing a bufferevent with
|
||||||
|
.Fn bufferevent_new .
|
||||||
.Sh BUFFERED EVENTS
|
.Sh BUFFERED EVENTS
|
||||||
.Nm libevent
|
.Nm libevent
|
||||||
provides an abstraction on top of the regular event callbacks.
|
provides an abstraction on top of the regular event callbacks.
|
||||||
@ -472,13 +479,25 @@ The next three parameters are callbacks.
|
|||||||
The read and write callback have the following form:
|
The read and write callback have the following form:
|
||||||
.Ft void
|
.Ft void
|
||||||
.Fn "(*cb)" "struct bufferevent *bufev" "void *arg" .
|
.Fn "(*cb)" "struct bufferevent *bufev" "void *arg" .
|
||||||
|
The error callback has the following form:
|
||||||
|
.Ft void
|
||||||
|
.Fn "(*cb)" "struct bufferevent *bufev" "short what" "void *arg" .
|
||||||
The argument is specified by the fourth parameter
|
The argument is specified by the fourth parameter
|
||||||
.Fa "cbarg" .
|
.Fa "cbarg" .
|
||||||
|
A
|
||||||
|
.Fa bufferevent struct
|
||||||
|
pointer is returned on success, NULL on error.
|
||||||
.Pp
|
.Pp
|
||||||
By default the buffered event is read enabled and will try to read
|
Once initialized, the bufferevent structure can be used repeatedly with
|
||||||
from the file descriptor.
|
bufferevent_enable() and bufferevent_disable(). The flags parameter can
|
||||||
The write callback is executed whenever the output buffer is drained
|
be a combination of
|
||||||
below the write low watermark, which is
|
.Va EV_READ
|
||||||
|
and
|
||||||
|
.Va EV_WRITE .
|
||||||
|
When read enabled the bufferevent will try to read from the file
|
||||||
|
descriptor and call the read callback. The write callback is executed
|
||||||
|
whenever the output buffer is drained below the write low watermark,
|
||||||
|
which is
|
||||||
.Va 0
|
.Va 0
|
||||||
by default.
|
by default.
|
||||||
.Pp
|
.Pp
|
||||||
@ -491,6 +510,9 @@ The
|
|||||||
.Fn bufferevent_read
|
.Fn bufferevent_read
|
||||||
function is used to read data from the input buffer.
|
function is used to read data from the input buffer.
|
||||||
Both functions return the amount of data written or read.
|
Both functions return the amount of data written or read.
|
||||||
|
.Pp
|
||||||
|
If multiple bases are in use, bufferevent_base_set() must be called before
|
||||||
|
enabling the bufferevent for the first time.
|
||||||
.Sh RETURN VALUES
|
.Sh RETURN VALUES
|
||||||
Upon successful completion
|
Upon successful completion
|
||||||
.Fn event_add
|
.Fn event_add
|
||||||
|
Loading…
x
Reference in New Issue
Block a user