linux epoll编程教程,linux epoll 简单demo

一个简单的epoll demo ,同时接受多个客户端连接,并把接收到的字符串转化为大写字母返回给客户端

#include

#include

#include

#include

#include

#define MAXLEN 1024

#define SERV_PORT 8000

#define MAX_OPEN_FD 1024

int main(int argc,char *argv[])

{

int listenfd,connfd,efd,ret;

char buf[MAXLEN];

struct sockaddr_in cliaddr,servaddr;

socklen_t clilen = sizeof(cliaddr);

struct epoll_event tep,ep[MAX_OPEN_FD];

listenfd = socket(AF_INET,SOCK_STREAM,);

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(SERV_PORT);

bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));

listen(listenfd,);

// 创建一个epoll fd

efd = epoll_create(MAX_OPEN_FD);

tep.events = EPOLLIN;tep.data.fd = listenfd;

// 把监听socket 先添加到efd中

ret = epoll_ctl(efd,EPOLL_CTL_ADD,listenfd,&tep);

// 循环等待

for (;;)

{

// 返回已就绪的epoll_event,-1表示阻塞,没有就绪的epoll_event,将一直等待

size_t nready = epoll_wait(efd,ep,MAX_OPEN_FD,-);

for (int i = ; i < nready; ++i)

{

// 如果是新的连接,需要把新的socket添加到efd中

if (ep[i].data.fd == listenfd )

{

connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);

tep.events = EPOLLIN;

tep.data.fd = connfd;

ret = epoll_ctl(efd,EPOLL_CTL_ADD,connfd,&tep);

}

// 否则,读取数据

else

{

connfd = ep[i].data.fd;

int bytes = read(connfd,buf,MAXLEN);

// 客户端关闭连接

if (bytes == ){

ret =epoll_ctl(efd,EPOLL_CTL_DEL,connfd,NULL);

close(connfd);

printf("client[%d] closed\n", i);

}

else

{

for (int j = ; j < bytes; ++j)

{

buf[j] = toupper(buf[j]);

}

// 向客户端发送数据

write(connfd,buf,bytes);

}

}

}

}

return ;

}

Server Develop (六) Linux epoll总结

Linux  epoll epoll是Kernel 2.6后新加入的事件机制,在高并发条件下,远优于select.epoll最大的好处在于它不会随着监听fd数目的增长而降低效率.因为在内核中的sele ...

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

Linux Epoll介绍和程序实例

Linux Epoll介绍和程序实例 1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似, ...

Linux epoll总结

Linux epoll总结 Linux  epoll epoll是Kernel 2.6后新加入的事件机制,在高并发条件下,远优于select.epoll最大的好处在于它不会随着监听fd数目的增长而降低 ...

Windows完成端口与Linux epoll技术简介

收藏自:http://www.cnblogs.com/cr0-3/archive/2011/09/09/2172280.html WINDOWS完成端口编程1.基本概念2.WINDOWS完成端口的特点 ...

Django实战&lpar;一&rpar;之简单Demo

菜鸟教程上Django安装可供参考: 参考链接: http://www.runoob.com/django/django-install.html 菜鸟教程上如果不行的话,下面博客网址可以供参考 Li ...

源码剖析Linux epoll实现机制及Linux上惊群

转载:https://blog.csdn.net/tgxallen/article/details/78086360 看源码是对一个技术认识最直接且最有效的方式了,之前用Linux Epoll做过一个 ...

Windows完成端口与Linux epoll技术简介(能看懂)

WINDOWS完成端口编程1.基本概念2.WINDOWS完成端口的特点3.完成端口(Completion Ports )相关数据结构和创建4.完成端口线程的工作原理5.Windows完成端口的实例代码 ...

如何在Python中使用Linux epoll

如何在Python中使用Linux epoll 内容 介绍 阻塞套接字编程示例 异步套接字和Linux epoll的好处 epoll的异步套接字编程示例 性能考量 源代码 介绍 从2.6版开始,Pyt ...

随机推荐

spring源码:学习线索(li)

一.spring xml配置(不包括AOP,主要了解在初始化及实例化过程中spring配置文件中每项内容的具体实现过程,从根本上掌握spring) 的名字 &,alia ...

Linux下配置一个VNC服务器

在Linux下配置一个VNC服务器,并设置2个用户,要求其中一个用户登录时不需要输入密码. 然后在客户端使用ssh+vncview的方式访问. 1确认vnc安装 2配置vncserver 3测试vnc ...

Spring&plus;SpringMVC&plus;MyBatis)

用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合的 ...

&commat;font-face

/**  * jQuery.hhNewSilder 滚动图片插件  * User: huanhuan  * QQ: 651471385  * Email: th.wanghuan@gmail.com ...

Codeforces Round &num;253 DIV1 C 馋

http://codeforces.com/contest/442/problem/C 题意非常easy,基本上肯定有坑坑洼洼的样子.看题目案例,从第三个跟第二个没有凹的案例来看的话,多写几个以及多画 ...

FlexPaper二次开发问题及搜索高亮显示

原文:FlexPaper二次开发问题及搜索高亮显示 最近有个需求,做一个IT知识库,类似于文库,说到文库肯定会用到在线浏览文档了,所有在网上翻阅了一下类似豆丁的在线浏览器插件的资料,将其进行了二次开发 ...

Spring DelegatingFilterProxy

Spring 里面定义了许多 Filter. 比如 OncePerRequestFilter. 如果我们自定义OncePerRequestFilter, 则可以配置到web.xml中进行一些拦截或日志 ...

ES6之遍历器(Iterator)

什么是Iterator?他是一种接口,为各种不同的数据结构提供统一的访问机制,任何数据结构只要部署上Iterator接口就可以完成遍历操作(PS:个人认为他的这个遍历就是c语言里面的指针),他的作用有 ...

C&num;移动及改变控件大小

//代码比较简单,就不多解析了. #region 移动窗体保存数据 Point mouseOff;//鼠标移动位置变量 bool leftFlag; //标志是否为左键 bool largeFlag; ...

SQL的各种连接Join详解

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN).SQL LEFT JOIN.SQL  ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值