文档章节

epoll中使用

g
 gelare
发布于 11/17 16:44
字数 275
阅读 5
收藏 0

1、一个线程epoll_wait时,另一个线程调用epoll_ctl是安全的。

2、使用edge触发,在socket有数据到来后,不收取数据,再次调用epoll_ctl将socket加入,仍会触发下一次动作。

asio用该方法来发送通知。

#include <thread>
#include <iostream>
#include <sys/socket.h>
#include <sys/epoll.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
using namespace std;
void reset_ev(int epfd, int fd)
{
	while (1)
	{
		std::chrono::milliseconds dura(2000);
		std::this_thread::sleep_for(dura);
		struct epoll_event ev;
		ev.data.fd = fd;
		ev.events = EPOLLIN | EPOLLET;
		epoll_ctl(epfd, EPOLL_CTL_MOD, fd, &ev);
	}
}

int main(int argc, char *argv[])
{
	int fd[2];
	if (socketpair(PF_LOCAL, SOCK_STREAM, 0, fd) < 0)
	{
		perror("socketpair");
		return 0;
	}

	write(fd[1], "c", 1);

	int epfd = epoll_create(1024);
	struct epoll_event ev;
	ev.data.fd = fd[0];
	ev.events = EPOLLIN | EPOLLET;
	epoll_ctl(epfd, EPOLL_CTL_ADD, fd[0], &ev);

	std::thread t(&reset_ev, epfd, fd[0]);

	epoll_event events[20];
	for (;;)
	{
		int nfds = epoll_wait(epfd, events, 20, -1);
		cout << "epoll_wait returns " << nfds << endl;
		for (int i = 0; i < nfds; ++i)
		{
			cout << "fd:" << events[i].data.fd << " triggered." << endl;
		}
	}
}

 

© 著作权归作者所有

共有 人打赏支持
g
粉丝 2
博文 139
码字总数 32288
作品 0
南京
私信 提问
epoll相关资料整理

http://www.cppblog.com/converse/archive/2008/10/13/63928.html epoll相关资料整理 学习epoll有一段时间了,最近终于有一个服务器采用了epoll模型,从中积累了一些epoll的资料.个人感觉目前可...

晨曦之光
2012/03/09
128
0
SylixOS 之epoll异常分析

1. SylixOS epoll介绍 SylixOS为了兼容Linux的epoll,创建了epoll的兼容子系统,并支持了epoll的部分功能。SylixOS epoll兼容子系统是由select子系统模拟出来的,所以效率没有select高。 2....

张荣荣123
2017/09/17
0
0
基于epoll实现的一个简单的web服务器

本文使用epoll建立一个简单的web服务器。通过epoll实现对过个端口的管理,非阻塞的数据发送。 使用到数据结构 typedef union epoll_data { 详解1 EPOLLIN:文件描述符可以读 所用到的函数: ...

Reage-
2013/03/20
0
4
lua-epoll 模块简单分析

这个模块是把Linux下的epoll操作按照Lua Cfunction 的格式封装出来,供lua使用。 Lua要求每一个扩展模块,必须提供luaopenXXX(luaState *L) 作为模块的入口函数,此函数会在require加载模块时...

kaedehao
2015/10/02
187
0
IO多路复用原理剖析

(最近笔试遇到笔试题:select,poll,epoll都是IO多路复用的机制)。 I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应...

Panda_Jerry
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

程序中设置MySQL的默认值

import com.alibaba.fastjson.JSON;import java.beans.PropertyDescriptor;import java.lang.annotation.*;import java.lang.reflect.Field;import java.lang.reflect.Method;impo......

laolin23
27分钟前
2
0
WordPress没有上级目录的写权限

sudo chmod -R 777 wordpress/wp-content

临江仙卜算子
34分钟前
4
0
大数据学习之大数据技术笔记—spring入门

篇一 spring介绍 spring.io 官网 快速开始 Aop 面向切面编程,可以任何位置,并且可以细致到方法上 连接框架与框架 Spring 就是 IOC AOP 思想 有效的组织中间层对象一般都是切入 service 层 ...

董黎明
35分钟前
5
0
ASP.NET Core MVC 静态文件配置

在启动文件中添加以下配置 public class Startup{ public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddDirectoryBrowser(); ......

whltian
今天
2
0
linux之自定义命令

本人使用的是ubuntu系统,不喜欢建各种桌面快捷链接,但是每次启动个软件,去查找又麻烦,所以自定义了命令,来快捷的启动应用: 1、修改/etc/bash.bashrc,在文件末尾,加上如下List-1中的内...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部