I am using an event_dispatch() loop as the basis for a server listening
on a socket and would like to terminate connections forcefully from the
server. The ideal flow would be: listen, client connects, event loop
dispatches to my bufferevent where I accept the connection, the read
callback is called and a response is given to the bufferevent, and the
connection is closed (of course the main socket is still listening).
Here is some stripped-down sample code illustrating my code structure so
far. In the on_read() function, I read from the client's request,
compute a response and write the response using bufferevent_write(). Is
there a way to close the connection after that data is written?
Currently I'm using special header and footer markers in the response
data so the client can figure out when the response has ended and close
the connection itself. However, it would be nice if the server could
close the connection so I won't have to have this logic in the client.
void on_read(struct bufferevent * bev, void * arg) {
// ...
char buf[4096];
size_t len = bufferevent_read(bev, (void *)buf, 4096);
// ...
bufferevent_write(bev, "foo\n", 4);
// *** I would like to close the connection after this write
}
void on_accept(int fd, short ev, void * arg) {
// ...
struct client * client = calloc(1, sizeof(struct client));
if (!client) {
fprintf(stderr, "Error: Call to calloc failed.\n");
exit(1);
}
client->fd = client_fd;
client->buf_ev = bufferevent_new(client_fd,
on_read, on_write, on_error, client);
bufferevent_enable(client->buf_ev, EV_READ);
}
int main(int argc, char * * argv) {
// ...
struct event ev_accept;
event_set(&ev_accept, listen_fd, EV_READ|EV_PERSIST, on_accept, 0);
event_add(&ev_accept, 0);
event_dispatch();
return 0;
}
Any help you can offer would be most appreciated. Thanks,
Richard
[EMAIL PROTECTED]
_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkeymail.org/mailman/listinfo/libevent-users