Hi,
I am working on a http proxy program based on le-proxy. the proxy has
a feature to block requests to some special urls, then return to the
client a 403 forbidden or 302 redirect response.
I tried to do it in bufferevent readcb, here are the code sample i wrote:
static void
readcb(struct bufferevent *bev, void *ctx)
{
struct bufferevent *partner = (struct bufferevent *)ctx;
int r = session_handle(bev, partner);
if (r == 1) { //the url need to be blocked and the output evbuffer
of bev has been set to "HTTP/1.0 403\r\n\r\n"
bufferevent_disable(bev, EV_READ);
struct evbuffer *b = bufferevent_get_input(bev);
evbuffer_drain(b, evbuffer_get_length(b));
if (partner) {
bufferevent_disable(partner, EV_READ|EV_WRITE);
bufferevent_free(partner);
}
if (evbuffer_get_length(bufferevent_get_output(bev))) {
bufferevent_setcb(bev, NULL, close_on_finished_writecb, eventcb, NULL);
}
else {
bufferevent_free(bev);
}
}
//otherwise
.....
}
with defer callback, when the above code is called, (ie. a request to
the to-be-blocked url is found)
I got the following warnings:
[warn] Epoll MOD on fd 10 failed. Old events were 6; read change was
2; write change was 0.: Bad file descriptor
The warning does not appear if the BEV_OPT_DEFER_CALLBACKS is not set.
Can anyone please explain where this warning comes from, and how to
avoid such a warning?
Thanks very much.
Best regards,
Zhuang
***********************************************************************
To unsubscribe, send an e-mail to [email protected] with
unsubscribe libevent-users in the body.