在openwrt上使用libevent库

定时器的使用

#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;    
  
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值