本示例程序使用libevent监控一个处于监听状态的tcp服务端socket,
并在有连接进来时打印一条消息。
#include <event.h>
int sock_fd; // tcp侦听句柄
// 事件回调函数,当有socket连接时执行
void event_occurs(int fd, short evt, void *arg)
{
if ( evt == EV_READ && fd == sock_fd )
printf("new connection\n");
else if ( evt == EV_TIMEOUT)
printf("event timeout\n");
}
int main (int argc, char **argv)
{
int sock_fd = open_server_socket(); // 调用一个自定义的socket端口侦听函数
// 返回socket句柄。
struct event evt; // 声明一个event
struct timeval timeout = {30, 0}; // 设置一次event超时为30秒
event_init(); // 初始化当前libevent, 在调用其他libevent函数之前调用一次
// 将socket句柄、监控的触发事件(EV_READ),事件发生后的回调函数、
// 回调函数参数,绑定到evt中。
event_set(&evt, sock_fd, EV_READ, event_occurs, NULL);
event_add(&evt, &timeout); // 设置一次监控的超时时间
event_dispach(); // 执行事件监控,直至超时或事件发生
// 如果要在事件发生后连续执行,需要重新add和dispatch
close(sock_fd);
return 0;
}
来源:oschina
链接:https://my.oschina.net/u/1014977/blog/201982