RT,最近想看点这方面的代码,有那个开源的工具是这个模型的么?最好是某个网络服务器的~~
by bedreaming - C/C++ - 2009-06-24 17:30:59 阅读(2205) 回复(12)
Linux 2.6内核中提高网络I/O性能的新方法epoll 正如我昨天在“Linux下各类TCP网络服务器的实现源代码”( http://zhoulifa.bokee.com/5345930.html )一文中提到的那样,I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。 感谢chinaunix.net上朋友safedead( http://bbs.chinaunix.net/viewpro.php?uid=407631 )提醒,我今天仔细研究了一下,证实了在2.6内核中的新的I/O技术epoll。 1、为什么select是...
发现epoll 有个问题, 连接上后,客户端连续发送两个请求,epoll 只检测到一个可读事件! 郁闷, 如果客户端是多线程,有可能同时向同一个socket发送消息,这样服务端这边的epoll就只检测到一个可读事件, 有啥办法没。 对于服务端创建的那个监听socket 可以用 while(1) { accept(); ...
server端: ev.data.fd=connfd; ev.events=epollIN|epollOUT|epollET; epoll_ctl(epfd,epoll_CTL_ADD,connfd,&ev); while(1) { nfds=epoll_wait(epfd,events,20,500); for(i=0;i<=nfds;i++) { if(events.events&epollIN) { recv(events.data.fd,line,5,0); ......... } else if(events.events&epollOUT) { do_process(); } ...
现在有一个程序,发现很多的CLOSE_WAIT的连接,但是我的代码中使用epoll_wait(),并根据read()返回为0的情况,关闭了连接。 netstat的时候发现CLOSE_WAIT连接的Send_Q都比较大,关于Send_Q的单位是字节,还是包?Send_Q对应内核中socket的发送队列? epoll_wait()是否会丢失事件?CLOSE_WAIT说明系统已经接收到对方的FIN了,按理说epoll_wait会监听到FIN事件,在后面read()时候,返回0,这个时候再关闭socket。 在并发数比较小的时...
首先引用一个服务器端 epoll 的实例。原帖地址:http://blog.chinaunix.net/u/16292/showart_1844376.html
[/code]
#include
在epoll的ET模式下,有时会发生如下的问题 1. epoll触发FD=A的事件 。 2.处理FD=A的事件并销毁A(即epoll_ctl_del(A)并close(A) ) 。 3.epoll再次触发FD=A的事件 。 如果这时候对象已经被删除或被重用,程序就会出现问题 。 哪位大侠解释下,不胜感激。
服务器有很多客户端连入, 如果一个客户端10秒钟内没发送任何数据, 服务器就关闭链接。 但是怎样让epoll响应SO_RCVTIMEO, 或者有没有啥其它好办法实现这个功能? 我目前想到的方法是用两个线程, 一个epoll, 另一个不停地扫描所有的链接。
typedef union epoll_data { void *ptr; //这个参数是干什么用的??????????????? int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t; 各位大虾,帮我看看能不能实现这个功能: ev.data.ptr = X; //给ev.data.ptr 赋值 : 其中 X 值可以是整型, 也可是字符型 ev.data.fd = m_socket; 在后面的可读事件中...
epoll 使用epollHUP 无法监测对方异常掉线 各位大虾好: 在网上看到epoll 例子千篇一律, 检测的事件基本都是epollIN epollOUT 这两个例子相对来说好测一点 但是这几个参数事件我却无法检测,当然和我的知识面有关。希望了解的大虾给予指点: epollPRI:表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来); epollERR:表示对应的文件描述符发生错误; epollHUP:表示对应的文件描述符被挂断; ...