[libevent]epoll_add()
来源:互联网 发布:手机出钱魔术软件 编辑:程序博客网 时间:2024/05/18 02:56
static intepoll_add(void *arg, struct event *ev){struct epollop *epollop = arg;struct epoll_event epev = {0, {0}};struct evepoll *evep;int fd, op, events;if (ev->ev_events & EV_SIGNAL)//信号事件并不用epoll_ctl注册return (evsignal_add(ev));fd = ev->ev_fd;if (fd >= epollop->nfds) {//重新分配空间/* Extent the file descriptor array as necessary */if (epoll_recalc(ev->ev_base, epollop, fd) == -1)return (-1);}evep = &epollop->fds[fd];//准备获得该文件描述符对应的event,其实就是ev了,下面根据是否为NULL来判断是新增还是修改来执行epoll_ctl()op = EPOLL_CTL_ADD;events = 0;if (evep->evread != NULL) {events |= EPOLLIN;op = EPOLL_CTL_MOD;}if (evep->evwrite != NULL) {events |= EPOLLOUT;op = EPOLL_CTL_MOD;}if (ev->ev_events & EV_READ)events |= EPOLLIN;if (ev->ev_events & EV_WRITE)events |= EPOLLOUT;epev.data.fd = fd;epev.events = events;if (epoll_ctl(epollop->epfd, op, ev->ev_fd, &epev) == -1)//注册return (-1);/* Update events responsible */if (ev->ev_events & EV_READ//一个读写event要对应一个evepoll,为什么还要用这个结构来存,因为用epoll_wait获得的是文件描述符evep->evread = ev;//用文件描述符来寻找event最好就是用下标来找,用下标找到evepoll再找到event,进行相应操作if (ev->ev_events & EV_WRITE)evep->evwrite = ev;return (0);}
0 0
- [libevent]epoll_add()
- libevent源码分析--epoll_add()函数
- libevent事件(三)---event_add和epoll_add
- libevent源码分析--epoll中的几个函数 epoll_init epoll_add epoll_dispatch
- libevent
- libevent
- libevent
- libevent
- libevent
- libevent
- libevent
- libevent
- libevent
- libevent
- libevent
- libevent
- libevent
- libevent
- 博乐招募开始啦
- Radiomics-从医学图像中获取更多信息
- 2016.7.21 多校赛 1009 (水题)
- JS循环遍历JSON数组
- Java之接口与工厂详解一(附源码)
- [libevent]epoll_add()
- JAVA用画板JFrame画布Panel画笔Graphics画一个星星,显示拖动的痕迹-3
- Android Dialog 的一些特性
- 线程与信号
- Mysql Create命令小结
- 阿里云日志服务日志写入华东2配置
- 单例模式加锁优化问题
- CentOS 6.4 下安装vsftpd
- Swift3.0获取网关地址