2013-09-17

让libevent HTTP服务器立即知道客户端的断开

Views: 22182 | Add Comments

虽然 libevent HTTP 服务器可以给连接注册关闭回调, 但客户端强制断开连接时, 服务器并没有立即知道.

 evhttp_connection_set_closecb(req->evcon, on_close, NULL);

原来, libevent 在收到 HTTP 请求后, 就不再监听读事件了, 所以就不能通过 read() 返回 0 来知道连接断开, 只能通过 send() 导致 SIGPIPE 才能知道.

为了让服务器立即知道客户端的断开, 只需要重新监听 EV_READ 事件即可.

struct bufferevent *bev = evhttp_connection_get_bufferevent(req->evcon);
bufferevent_enable(bev, EV_READ);

Related posts:

  1. Libevent 2 HTTP 客户端示例
  2. 150行C代码的comet服务器
  3. Libevent HTTP 内存泄露
  4. 数据传输中的停止等待机制的实现
  5. 基于列的数据库
Posted by ideawu at 2013-09-17 13:48:33 Tags:

Leave a Comment