网络上所有资料都说epoll是高并发、单线程、IO重叠服用的首选架构,比select和poll性能都要好,特别是在有大量不活跃连接的情况下。具体原理就不阐述了,下面说说使用。
具有有三个函数:
#include <sys/epoll.h>
1、int epoll_create ( int size );
size是epoll要监视的fd的规模。
2、int epoll_ctl ( int epfd, int op, int fd, struct epoll_event *event );
(1)epfd:epoll_create的返回值。
(3)fd:要操作的文件描述符(socket)
struct epoll_event
{
};
events:描述事件类型。events可以是以下几个宏的集合:
 EPOLLOUT:表示对应的文件描述符可以写;
 EPOLLERR:表示对应的文件描述符发生错误;
EPOLLHUP:表示对应的文件描述符被挂断;
EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里。
data成员:其中data.fd常用来装要操作的fd。
typedef union epoll_data
{
3、int epoll_wait ( int epfd, struct epoll_event* events, int maxevents, int timeout );
events: events指向的数组中将拷贝所有就绪的事件,从内核事件表中。events的成员是struct epoll_event类型,一般包含events(其值是如:EPOLLIN、EPOLLOUT等)。还有一个是data.fd,包含拷贝的事件对应的socket,如果是服务器监听socket,说明是有用户连接到这个socket,如果是其他已经连接好的socket,说明是有数据要发送或者接收。
实例代码:
epoll.c
#include <stdio.h>
#include <sys/epoll.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <errno.h>
{
}
client2.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
}
原文:https://www.cnblogs.com/znwang/p/9279834.html