libevent简单例子。
步骤
-
创建event_base对象。
struct event_base *base = event_base_new(); -
设置需要绑定地址对象。sockaddr_in
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8888); -
绑定ip端口,及回调函数(新链接到来时,即监听的fd可读时),生产evconnlistener对象
struct evconnlistener listener = evconnlistener_new_bind(base,
connect_func, (void)base,
LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE, -1,
(struct sockaddr*)&sin,
sizeof(sin));
-
开始时间分发
event_base_dispatch(base); -
释放资源
evconnlistener_free(listener);
event_base_free(base); -
监听fd可读回调函数
当链接到来时,生成1个buffevent对象,然后为此对象设置回调函数。
struct bufferevent *bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
bufferevent_setcb(bev, read_func, NULL, NULL, NULL);
bufferevent_enable(bev, EV_READ);
完整例子。
下面是一个echo服务,服务器接收客户端发过来的内容,并且原样发给客户端。
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <event2/bufferevent.h>
#include <event2/buffer.h>