Linux编程之Epoll高并发

匿名 (未验证) 提交于 2019-12-02 21:59:42

网络上所有资料都说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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!