libevent(3)

来源:互联网 发布:帮淘宝刷好评要交钱吗 编辑:程序博客网 时间:2024/06/15 02:36

信号signal事件:

见博客http://www.cnblogs.com/hustcat/archive/2010/08/31/1814022.html分析

socket pair
Libevent通过socketpair,将signal事件与I/O事件完美的统一起来。Socketpair,简单的说就一对socket,一端用于写,一端用于读。工作方式如下

为了与I/O事件统一起来,libevent内部使用了一个针对read socket的读事件。

Socketpair的创建
与信号事件的初始化工作都是在evsignal_init中完成的,而evsignal_init通过调用evutil_socketpair创建socketpair。对于Unix平台,有socketpair系统调用;对于Windows,则相对复杂一些,具体见evutil_socketpair函数的实现。

Socketpair used to send notifications from the signal handler

evsig_info结构体分析

struct evsig_info {/* Event watching ev_signal_pair[1] */struct event ev_signal;/* Socketpair used to send notifications from the signal handler */evutil_socket_t ev_signal_pair[2];/* True iff we've added the ev_signal event yet. */int ev_signal_added;/* Count of the number of signals we're currently watching. */int ev_n_signals_added;/* Array of previous signal handler objects before Libevent started * messing with them.  Used to restore old signal handlers. */#ifdef EVENT__HAVE_SIGACTIONstruct sigaction **sh_old;#elseev_sighandler_t **sh_old;#endif/* Size of sh_old. */int sh_old_max;};


0 0