Introduction
handle 句柄就类似于事件, 需要被注册到 loop 中.
在 libuv 中, 事件的基本类型都已经给出了定义, 共同”继承”了 uv_handle_s
, 这里所说的继承, 是c语言通过 -_ 来曲线救国实现的
抽象基类
抽象基类是 uv_handle_t
:
/* The abstract base class of all handles. */
struct uv_handle_s {
UV_HANDLE_FIELDS
};
其中 UV_HANDLE_FIELDS
是宏定义, 里面还宏定义了 UV_HANDLE_PRIVATE_FIELDS
, 后者字段的定义根据平台的不同而不一致, 这里将在 unix
平台下的展开后的定义给出:
struct uv_handle_s {
/* public */
void* data; //句柄携带的数据
/* read-only */
uv_loop_t* loop; //句柄绑定的事件循环
uv_handle_type type; //句柄类型
/* private */
uv_close_cb close_cb; //句柄close时的回调
void* handle_queue[2]; //句柄队列节点
union {
int fd; //绑定的真实资源索引
void* reserved[4];
} u;