定时器的使用
#include ...
#include <event2/event.h>
struct event *ev;
static void levent_udp_timeout(evutil_socket_t fd, short what, void *arg)
{
printf("hello timeout\n");
struct timeval timeout;
timeout.tv_sec = 3;
timeout.tv_usec = 0;
evtimer_add(ev, &timeout);//循环增加定时器
}
int main(int argc, char **argv)
{
struct event_base *base; //定义一个event_base
struct timeval timeout;
base = event_base_new(); //初始化一个event_base
ev = evtimer_new(base, levent_udp_timeout, NULL);
timeout.tv_sec = 3;
timeout.tv_usec = 0;
evtimer_add(ev, &timeout);
int y = event_base_dispatch(base);
event_base_free(base);
return 1;
}
openwrt makefile依赖的是libevent2库
DEPENDS:= +libevent2
编译增加库名: -levent
套接字的使用
#include ...
#include <event2/event.h>
struct event_base *gbase;
int multicast_cb()
{
char buffer[BUFLEN] = {0};
int n = 0, socklen;
struct sockaddr_in peeraddr;
/* 循环接收网络上来的组播消息 */
n = recvfrom(RecvFD, buffer, BUFLEN, 0, (struct sockaddr *) &peeraddr, &socklen);
if (n < 0) {
perror("recvfrom");
} else {
/* 成功接收到数据报 */
printf("peer:%s", buffer);
process(buffer, n, peeraddr);
}
}
int main()
{
gbase = event_base_new(); //初始化一个event_base
event_add(event_new(gbase, RecvFD, EV_READ|EV_PERSIST, multicast_cb, NULL), NULL);
event_base_dispatch(gbase);
event_base_free(gbase);
return 0;
}
信号的使用:
#include ...
#include <event2/event.h>
struct event_base *gbase;
static void sigchld_cb(evutil_socket_t fd, short event, void *arg)
{
pid_t pid;
int stat;
do {
pid = waitpid(-1, &stat, WNOHANG);
if (pid > 0) {
log_debug("child %d exit code is %d\n", pid, stat);
}
}while(pid > 0);
return;
}
int main()
{
gbase = event_base_new(); //初始化一个event_base
evsignal_add(evsignal_new(gbase, SIGCHLD, sigchld_cb, NULL), NULL);
event_base_dispatch(gbase);
event_base_free(gbase);
return 0;
}