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


發佈了37 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章