epoll代码框架

epoll代码实现框架:

#define MAX_EVENTS 10

struct epoll_event ev, events[MAX_EVENTS];

int listen_sock, conn_sock, nfds, epollfd;

/* Code to set up listening socket, 'listen_sock',
  (socket(), bind(), listen()) omitted */

epollfd = epoll_create1(0);
if (epollfd == -1) {
   perror("epoll_create1");
   exit(EXIT_FAILURE);
}

ev.events  = EPOLLIN;
ev.data.fd = listen_sock;

if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) == -1) {
   perror("epoll_ctl: listen_sock");
   exit(EXIT_FAILURE);
}

for (;;) {
   nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);
   if (nfds == -1) {
	   perror("epoll_wait");
	   exit(EXIT_FAILURE);
   }

   for (n = 0; n < nfds; ++n) {
	   if (events[n].data.fd == listen_sock) {
		   conn_sock = accept(listen_sock,
							  (struct sockaddr *) &addr, &addrlen);
		   if (conn_sock == -1) {
			   perror("accept");
			   exit(EXIT_FAILURE);
		   }
		   setnonblocking(conn_sock);
		   ev.events = EPOLLIN | EPOLLET;
		   ev.data.fd = conn_sock;
		   if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,
					   &ev) == -1) {
			   perror("epoll_ctl: conn_sock");
			   exit(EXIT_FAILURE);
		   }
	   } else {
		   do_use_fd(events[n].data.fd);
	   }
   }
}
posted @ 2020-06-21 23:56  叨陪鲤  阅读(61)  评论(0编辑  收藏  举报