libevent笔记

bufferevent.h

传递到事件回调函数的事件

#define BEV_EVENT_READING   0x01    /**< 读取过程中遇到的错误 */
#define BEV_EVENT_WRITING   0x02    /**< 写数据过程中遇到错误 */
#define BEV_EVENT_EOF       0x10    /**< 读到了文件结束符EOF */
#define BEV_EVENT_ERROR     0x20    /**< 遇到了不可恢复的错误 */
#define BEV_EVENT_TIMEOUT   0x40    /**< 表示计时器的时间到了 */
#define BEV_EVENT_CONNECTED 0x80    /**< 表示connect操作完成 */

读写回调函数的原型

/*
   这是一个用于bufferevent的读写回调函数
   
   当有新数据到达input buffer时且数据量高于低水位(默认为0),读回调被触发。
   
   当output buffer被清空(已经发送完了)或者低于低水位时,写回调被触发。
   
   @param bev 被调用的函数所属的bufferevent
   @param ctx 用户所定义的内容
 */
 
typedef void (*bufferevent_data_cb)(struct bufferevent *bev, void *ctx);

错误回调函数的原型

/**
   bufferevent的错误或者特别事件的回调函数
   
   这个回调会在读到EOF或者遇到不可恢复的错误时被触发
   
   @param bev 遇到错误条件的bufferevent
   
   @param what 是一个联合标志,包含BEV_EVENT_READING 或者 BEV_EVENT_WRITING其中之一表示   错误是在读数据还是写数据时产生,另外还包含一下其中之一个标志 BEV_EVENT_EOF,BEV_EVENT_ERROR,BEV_EVENT_TIMEOUT, BEV_EVENT_CONNECTED
   
   @param ctx 用户指定的内容
*/
typedef void (*bufferevent_event_cb)(struct bufferevent *bev, short what, void *ctx);

创建bufferevent时的可选项

/** Options that can be specified when creating a bufferevent */
enum bufferevent_options {
    /** If set, we close the underlying file
     * descriptor/bufferevent/whatever when this bufferevent is freed. */
    BEV_OPT_CLOSE_ON_FREE = (1<<0),

    /** 如果设置了,且多线程选项被打开,则此buffervent受锁保护 */
    BEV_OPT_THREADSAFE = (1<<1),

    /** If set, callbacks are run deferred in the event loop.(延迟回调?) */
    BEV_OPT_DEFER_CALLBACKS = (1<<2),

    /** If set, callbacks are executed without locks being held on the
    * bufferevent.  This option currently requires that
    * BEV_OPT_DEFER_CALLBACKS also be set; a future version of Libevent
    * might remove the requirement.*/
    BEV_OPT_UNLOCK_CALLBACKS = (1<<3)
};

创建bufferevent

/**
  基于一个已存在的socket来创建一个socket bufferevent
  @param base 指定为哪个事件循环分配bufferevent
  @param fd 需要进行读写的socket文件描述符.
        该文件描述符不可是管道( pipe(2)).
        fd可以为-1,只要之后调用bufferevent_setfd(重设fd)或者调用bufferevent_socket_connect()(连接不用fd)
        
  @param options 选项可以为0或者BEV_OPT_*类的标志(参考上一段)
  @返回新创建的bufferevent结构体的指针,如果出现错误则返回NULL
  @see bufferevent_free()
  */
struct bufferevent *bufferevent_socket_new(struct event_base *base, evutil_socket_t fd, int options);

发起连接connect

/**
   Launch a connect() attempt with a socket-based bufferevent.

   When the connect succeeds, the eventcb will be invoked with
   BEV_EVENT_CONNECTED set.

   If the bufferevent does not already have a socket set, we allocate a new
   socket here and make it nonblocking before we begin.

   If no address is provided, we assume that the socket is already connecting,
   and configure the bufferevent so that a BEV_EVENT_CONNECTED event will be
   yielded when it is done connecting.

   @param bufev an existing bufferevent allocated with
       bufferevent_socket_new().
   @param addr the address we should connect to
   @param socklen The length of the address
   @return 0 on success, -1 on failure.
 */
int bufferevent_socket_connect(struct bufferevent *, struct sockaddr *, int);

你可能感兴趣的:(libevent笔记)