epoll代码框架
2024-09-04 19:57:44
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);
}
}
}
最新文章
- .NET单元测试的艺术-3.测试代码
- ACM/ICPC 之 网络流-拆点构图(POJ2391)
- Tomcat 6.0 简介
- 嵌入式 hi3518c平台网卡模式MII与RMII模式在Uboot和kernel中切换小结
- checkbox组件
- python中如何使用help命令?
- c++中vector等容器的实现机制
- javascript----bug
- Android中进程生命周期的优先级
- iOS_17_控制开关_TabBarController_由storyboard道路
- Java学习笔记9---类静态成员变量的存储位置及JVM的内存划分
- hadoop一键安装伪分布式
- ng-book札记——Angular工作方式
- 盘点 Oracle 11g 中新特性带来的10大性能影响
- javaweb开发3.基于Servlet+JSP+JavaBean开发模式的用户登录注册
- 漫画 | Spring AOP的底层原理是什么?
- HDOJ2025_查找最大元素
- video 在移动端播放禁止全屏
- IE 出现stack overflow 报错的原因归纳
- 微信开发(3):微信公众号发现金红包功能开发,利用第三方SDK实现(转)