Hi, I'm building a server with libevent2.0.21. I create a new bufferevent
for every accepted connection like below:
struct event_base* conn_evbase = event_base_new();
if (NULL == conn_evbase){
_error("can not create event base for client!");
close_and_free_connection(client);
}
client->evbase = conn_evbase;
struct bufferevent *bev =
bufferevent_socket_new(client->evbase,fd,BEV_OPT_CLOSE_ON_FREE);
if (!bev){
_error("can not create bufferevent!");
close_and_free_connection(client);
return NULL;
}
bufferevent_setcb(bev,asp_connection_read,asp_connection_write,asp_connection_event,client);
bufferevent_enable(bev,EV_READ | EV_WRITE);
client->buf_ev = bev;
I attached read/write handler on this event and let EV_READ/EV_WRITE
enabled.
I start this server, and use a python script client to connect it. After
connected, the client send a request to server and wait for response, the
log on server console like the below:
.. start connection from 127.0.0.1
.. write back to client (means write handler was called)
.. writeback ended (means reached the last line of write handler method)
.. read request from client
.. appended a new response (saved in a queue)
.. read request from client
.. appended a new response (saved in a queue)
What I want is write handler will be trigged repeatedly because there's no
data on underlying write buffer (via ss command).
As you see, when a client was connected, the write handler was trigged but
only this time, it never be called anymore dispite the client was waiting
for response. It seems like the EV_WRITE was removed from event base.
Hope for your help, thanks a lot!