libevent 一个简单的event示例

蓝咒 提交于 2020-12-03 14:14:35

本示例程序使用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;
 }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!