首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

libevent中event_free的有关问题

2013-09-29 
libevent中event_free的问题if (::bind(fd, (struct sockaddr*)&sin, sizeof(sin)) -1) {perror(bind

libevent中event_free的问题



  if (::bind(fd, (struct sockaddr*)&sin, sizeof(sin)) == -1) {
    perror("bind ERR");
    return -1;
  }

  if (::listen(fd, 256) == -1) {
    perror("listen ERR");
    return -1;
  }

  base = event_base_new();
  if (!base) {
    perror("event_base_new ERR");
    return -1;
  }
  event *listen_ev = event_new(base, fd, EV_READ | EV_PERSIST, on_accept, NULL);
  event_add(listen_ev, NULL);
  event_base_dispatch(base);
  return 0;
}
void on_accept(int fd, short event, void *arg)
{
  int connfd = ::accept(fd, NULL, NULL);
  if (connfd == -1) {
    perror("accept ERR");
    return;
  }
  int flag = 1;
  struct event *read_ev = NULL;
  read_ev = event_new(base, connfd, EV_READ, on_read, (void*)&read_ev);
  event_add(read_ev, NULL);
}
void on_read(int fd, short event, void *arg)
{
  static char buf[512] = {0};
  ::recv(fd, buf, sizeof(buf) - 1, 0);

  struct event *write_ev = NULL;
  write_ev = event_new(base, fd, EV_WRITE, on_write, (void*)&write_ev);
  event_add(write_ev, NULL);

  //struct event *read_ev = *(struct event**)arg;
  //event_free(read_ev);
}
void on_write(int fd, short event, void *arg)
{
  static char buf[] = "HTTP/1.0 200 OK\r\n"
                      "Content-type:text/html\r\n"
                      "Content-length:6\r\n"
                      "\r\n"
                      "hello!";
  int size = sizeof(buf) - 1;
  ::send(fd, buf, size, 0);
  struct event *write_ev = *(struct event**)write_ev;
  //event_free(write_ev);
  close(fd);
}

初学libevent,写个简单web server例子,用ab测试。
但是测试的时候发现,如果event_free(read_ev/write_ev)不注释的话,ab会超时,注释后,可以用ab正常测试,为什么呢?那我应该如何释放event? ab测试 web?server libevent
[解决办法]

 event_del();

//The function event_new() returns a new event that can be used in
//future calls to event_add() and event_del().
  

热点排行