libevent 一个简单的event示例

jopen 10年前

libevent的一个入门event示例及说明。本示例程序使用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;   }