各位侠客,我为了用epoll功能,把redhat9的kernel2.4.20编译升级到了2.6.18。调用epoll相关函数编译时出错找不到相应的定义。所以重新编译了glibc2.3.4。然后能正常编译过去也能运行。但epoll_wait当有客户端新连接时也不会触发,客户端连接是成功的;同时epoll_wait的timeout设任何值(0,-1,10000等)都立即返回-1。一直搞不明白为什么会这样,epoll_create、epoll_ctl都正常,唯有epoll_wait出现这么奇怪的现象,是不是内核没...
by jsjlj2003 - Linux环境编程 - 2013-04-16 10:56:41 阅读(1119) 回复(1)
在linux下使用epoll实现一个事件分发器,设置一个fd的epoll参数为:epollHUP,epollIN,epollOUT,epollERR,采用默认的LT触发模式,sock为BLOCK模式。在epoll_wait是设置超时时间为10s。 正常情况下跑是正常的。在做压力测试时出现epoll_wait_nocancel ()阻塞住了,此时sock上的netstat来看,Recv-Q上有大量数据。 请大侠指点迷津,谢谢~~
epoll刚开始收包的时候正常。 收了一会以后一直阻塞epoll_wait这边。 我已经做了 struct epoll_event ev; ev.data.fd = client_socket; ev.events = epollIN|epollET; if (epoll_ctl(epfd, epoll_CTL_MOD, client_socket, &ev)) { perror("error1:"); exit(0); }
大家有没有遇到epoll_wait()一次返回的事件里有相同的events,就是events.data.fd=events[j].data.fd (i!=j), 我测试的是一秒大概5000个tcp通信
多个进程epoll_wait侦听某个端口的时候存在惊群的问题。 有一个客户端连接时,会唤醒所有进程。 这里说的唤醒是说的每个侦听这个端口的进程都从epoll_wait中返回,只有一个返回值大于0,其他都返回0吗。
本帖最后由 cxytz01 于 2013-09-12 01:07 编辑 看到一些代码,多线程直接epoll_wait同一个epfd,也不加锁。 epoll_wait难道同accept一样了,没有惊群了? 假如一个epfd同时注册n个socket fd的epollIN,且这些fd都有数据到来,那么多线程情况下epoll_wait的返回值都是一样的,都是n? 那么每个线程不是都可以在event里面直接处理同一个fd了? 假如有这么一种情况。多个线程epoll_wait一个epfd,其中线程一阻塞在epoll_wait这里...
int nFds = epoll_wait(m_hepollFd, m_pEventList, MAXSOCKETNUM, m_nTimeOut); for ( pEvents = m_pEventList; i < nFds; ++i, ++pEvents ) { 出现 epollERR & pEvents->events , 这时的 error 为EMFILE } 对linux了解比较浅,查了下EMFILE是说进程打开的文件数超出系统限制 我的想法是 是不是服务器在接受了联接或者做什么其他操作的时候会打开文件,但是没有做回收? 如果是这种情况,我用的epoll,...
本帖最后由 xinglp 于 2010-03-14 11:25 编辑 不知道这样是否正确 1.创建listenfd监听并设置非阻塞 2.fork()一定数量的子进程 3.子进程创建epollfd并注册从父进程继承的listenfd 4.子进程等待在epoll_wait()上 当有链接来的时候所有的子进程都从epoll_wait()上返回了 这样会不会有性能问题 但是这样的情况 1.创建listenfd监听并设置非阻塞 2.fork()一定数量的子进程 3.子进程等待accept()上 当有链接来的时候就只有一个子进程...
我写了一个程序,直接跑没什么问题。但是用gdb跑的时候,总提示epoll_wait error: Interrupted system call 不知道什么原因。我使用的epoll实现的服务器程序。使用一个线程跑epoll_wait.google了半天也没什么线索。谢谢。
我想问个关于epoll_wait的问题,我的程序在初始化的时候根据CPU的核数,还有数量来分配了适当的线程数,每个线程创建一个epoll对象,工作线程起来后,会阻塞在epoll_wait函数处,当有用户发送数据包的时候,会进行处理,为了避免线程同步带来的问题,我以会话为单位来进行操作。每个会话只会在指定的epoll对象中,由于程序的功能所需,需要设定计时器。保证1分钟切换会话中的下一个用户,由于在这个过程中有可能会出现:用户的添加...
大家好,我在学习epoll的使用时,遇到一个问题,请大家帮助,问题如下: int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout); 上式是epoll_wait的声明,其中参数maxevents代表本次调用后kernel返回的发生了比如可读事件的最大事件数目, 我的疑问就是这个maxevents到底应该如何设置呢?比如在最初的epoll_create中我设置了参数为1000,那么是否这里的maxevents就是1000?另外,既然是1000,那么...