从聊天室代码看epoll的使用和对比

Posted xdmonkey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从聊天室代码看epoll的使用和对比相关的知识,希望对你有一定的参考价值。

网上找到了一份基于epoll的简单的多人聊天室代码,感觉对epoll的学习十分有用,代码会附在后面,简单看一下epoll相关的API。

epoll相关的API主要有三个:epoll_create、epoll_ctl和epoll_wait

int epoll_create(int size);
参数size:用来告诉内核要监听的数目一共有多少个。
返回值:成功时,返回一个非负整数的文件描述符,作为创建好的epoll句柄。调用失败时,返回-1,错误信息可以通过errno获得。

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

参数epfd:epoll_create()函数返回的epoll句柄。
参数op:操作选项,op的可选值有三个:EPOLL_CTL_ADD(注册新的fd到epfd上)、EPOLL_CTL_MOD(修改已经注册的fd的监听事件)和EPOLL_CTL_DEL(从epfd中删除一个fd)。
参数fd:要进行操作的目标文件描述符。
参数event:struct epoll_event结构指针,将fd和要进行的操作关联起来。
返回值:成功时,返回0,作为创建好的epoll句柄。调用失败时,返回-1,错误信息可以通过errno获得。
说明:epoll的事件注册函数,它不同与select()是在监听事件时告诉内核要监听什么类型的事件,而是在这里先注册要监听的事件类型。

另外,event结构体的结构如下:

 

int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);

参数epfd:epoll_create()函数返回的epoll句柄。
参数events:struct epoll_event结构指针,用来从内核得到事件的集合。
参数 maxevents:告诉内核这个events有多大
参数 timeout: 等待时的超时时间,以毫秒为单位。
返回值:成功时,返回需要处理的事件数目。调用失败时,返回0,表示等待超时。

手动阀

 

以上是关于从聊天室代码看epoll的使用和对比的主要内容,如果未能解决你的问题,请参考以下文章

netty系列之:epoll传输协议详解

基于EPOLL模型的局域网聊天室和Echo服务器

CC++语言利用epoll实现高并发聊天室Demo

适合新手练手的免费C/C++小程序

简单通讯聊天 群聊功能 Windows下的客户端 Linux下的epoll服务器

Linux 即时聊天系统(tcp)epoll 版