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);
}
event_del();
//The function event_new() returns a new event that can be used in
//future calls to event_add() and event_del().