这只是一个线程池的框架还有许多不足 : 没有实现server->client数据发送 , 还有许多细节没有完善。 Lock.cpp : 锁的操作 , 读锁可以并发 , 写锁独占. Queue.h : 队列的封装 , 队列的读和写都加了锁的保护. Socket.cpp : 套接口的简单封装. Thread.cpp : 线程的封装实现了些简单的线程停止,运行等功能 , 启动别的线程的时候需要继承次类. Worker.cpp : 用户接口类 , 用户需继承此类。 ListenThread.cpp(继承Threa...
by ruchong - C/C++ - 2012-11-12 13:42:07 阅读(22236) 回复(34)
是这样的,我想看一下epoll在linux内核中是怎样实现的,然后用grep查找相关的源代码,但只能找到头文件,硬是找不到相关的实现原理。 [quote] /linux/syscalls.h: asmlinkage long sys_epoll_create (int size); //... [/quote] 请问,怎没有实现的C文件呢?
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。 在并发数比较小的时...