免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1515 | 回复: 0
打印 上一主题 下一主题

[网络管理] linux epoll 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-27 09:51 |只看该作者 |倒序浏览
在linux下用epoll写了个tcp的类,但是在测试的时候发现接受连接的效率不是很高~,不知道是不是我代码写得有点问题,

测试过程如下:

在redhat 5下运行epoll服务端,在另一台机器上的windows下以完成端口写成的客户端连接服务端

1、循环连接100个客户端,每个连接后都发送一个5字节的数据,每两次连接中间没有Sleep。
    服务端显示连接上96个客户端,接收到96个数据。

2、循环连接1000客户端,每个连接后都发送一个5字节的数据,每两次连接中间没有Sleep。
    服务端显示连接上987个客户端,接收到987个数据。

3、循环连接1000客户端,每个连接后都发送一个5字节的数据,每两次连接中间没有Sleep(10),
    服务端显示连接上1000个客户端,接收到1000个数据。

4、循环连接1000客户端,每个连接后都发送一个5字节的数据,每两次连接中间没有Sleep(1),
    服务端显示连接上996个客户端,接收到993个数据。

按照这种测试结果,似乎说明epoll无法承受很快速的连接?

我用windows 的IOCP服务器进行测试,sleep(1)进行连接是OK的。
代码如下:

nfds = epoll_wait(pThis->m_epollfd, events, 1, 10);//million seconds
  
  
  if (nfds == -1)
  {
   myPrint("SEPOLL.cpp", __LINE__, "epoll_wait error", errno);
   continue;
  }
  
  for(i=0;i<nfds;++i)
  
  {
      if(events.data.fd == pThis->m_listenfd)
    {
      connfd = accept(pThis->m_listenfd, (struct sockaddr*)(&ClientAddr), &addrlen);
     if(connfd<0)
     {
      perror("connfd<0");
      break;
     }
     
     
     pThis->setnonblocking(connfd);
     pContext = pThis->AllocateContext(connfd);
     pContext->iConnectionType = CLIENT_CONNECTION;
     pContext->addrRemote = ClientAddr;
     pThis->GetSockAddr(pContext->sock, pContext->addrLocal);
     pThis->AddAConnection(pContext);
     ev.data.ptr = (void*)pContext;
     ev.events = EPOLLIN|EPOLLERR|EPOLLHUP|EPOLLET;
     epoll_ctl(pThis->m_epollfd, EPOLL_CTL_ADD, connfd, &ev);
     
     ev.events = EPOLLOUT|EPOLLET;
     epoll_ctl(pThis->m_epollWritefd, EPOLL_CTL_ADD, connfd, &ev);
     break;
    }
   }
    else if (events.events&EPOLLERR)
   {
    pContext = (EPOLL_CONTEXT*)events.data.ptr;
    pThis->HandleEPollErr(pContext);
   
   }
   else if (events.events&EPOLLHUP)
   {
    pContext = (EPOLL_CONTEXT*)events.data.ptr;
    pThis->HandleEPollHup(pContext);
   
   }
   else if (events.events&EPOLLIN)
   {
    pContext = (EPOLL_CONTEXT*)events.data.ptr;
    pThis->HandleEpollIn(pContext);
   }   
  }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP