电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

epoll边缘触发(epollet)源代码例子

epoll边缘触发(epollet)源代码例子_第1页
1/8
epoll边缘触发(epollet)源代码例子_第2页
2/8
epoll边缘触发(epollet)源代码例子_第3页
3/8
epoll 边缘触发(epoll et) 源代码例子 在利用epoll编写网络应用程序,特别是服务器的时候。为了得到最优的效果,一般采用边缘触发(epoll ET)的方式。由于边缘触发,epoll_wait只有在套接字状态发生变化的时候才会返回。所以要对套接字(socket)进行循环 accept,read,write;直到套接字的缓冲区空(read,accept)或者填满(write)为止。当 read返回的字节数小于要读的字节数,或者返回 EAGAIN的时候,认为缓存区为空了。由于网络上已经有很多 epollet如何处理epollin事件的例子,所以下面是本人只提供测试如何处理 epollout事件的代码。 /* ============================================================================ Name : epoll_test.c Author : Version : Copyright : Your copyright notice Description : epoll et example(echo) 此 echo 服务器对输入的内容复制了 REPEAT_NUM(20000 次),然后返回给客户端 用于测试 epollout 事件如何触发。 ============================================================================ */ #include #include #include #include #include #include #include #include #include #include #include #define EPOLL_SIZE 10 #define EVENT_ARR 20 #define BACK_QUEUE 10 #define PORT 18001 #define BUF_SIZE 16 #define REPEAT_NUM 20000 #define OUT_BUF_SIZE 32*REPEAT_NUM int g_srv_fd; //由于有可能不能一次 write 所有的内容,所以需要全局变量保存内容的长度,内容输出到那里, //在监听到 epollout 事件后继续上一次的发送 char g_out_buf[OUT_BUF_SIZE];//保存输出的内容 int g_out_buf_offset; //保存输出到那里 int g_out_buf_len; //保存输出内容的长度 int g_has_write_buf; //保存是否要写输出内容 void setnonblocking(int sockFd) { int opt; opt = fcntl(sockFd, F_GETFL); if (opt < 0) { printf("fcntl(F_GETFL) fail."); exit(-1); } opt |= O_NONBLOCK; if (fcntl(sockFd, F_SETFL, opt) < 0) { printf("fcntl(F_SETFL) fail."); exit(-1); } } void handle_sig(int signum) { close(...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

epoll边缘触发(epollet)源代码例子

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部