当前位置:  技术问答>linux和unix

epoll 并发接收数据丢失问题

    来源: 互联网  发布时间:2016-05-21

    本文导语:  我在windows上通过批处理快速的循环打开了10多个客户端,  客户端一启动马上就向服务器发送数据,通过观察,发现客户端并发的一起向服务器发送数据频率是0.1秒, 大概22字节的样子, 总是有1~2个客户端发送的...

我在windows上通过批处理快速的循环打开了10多个客户端,  客户端一启动马上就向服务器发送数据,通过观察,发现客户端并发的一起向服务器发送数据频率是0.1秒, 大概22字节的样子, 总是有1~2个客户端发送的数据服务器没有收到(receiveSocketData接口就没有被触发)。
注意:我的测试模式是 服务器收到包则会返回一个包, 客户端也是收到一个包才会发送一个包, 因此那2个客户端是第一次发送服务器就没收到而后就不能继续发往服务器了, 他们的连接是通的。

服务器大概这个样子:

startEpoll()
{
    socklen_t socklen;
    int n = 0;

if ( !isInit() ){
DEBUG_MSG( ">>you must to init epoll.n" );
return -1;
}

    if ( listen( listener, lisnum ) == -1 ) 
    {
        perror( ">>listen" );
        return -1;
    } 
    else
        DEBUG_MSG( ">>start server of network is successfully!n" );

    /* 创建 epoll 句柄,把监听 socket 加入到 epoll 集合里 */
    kdpfd = epoll_create( m_maxEpollSize );
    socklen = sizeof( struct sockaddr_in );
    ev.events = EPOLLIN | EPOLLET;
    ev.data.fd = listener;
    
    if ( epoll_ctl( kdpfd, EPOLL_CTL_ADD, listener, &ev) collect();
// 将所有接收到的消息全部压入环形缓冲区
SocketBufferAssigner::getSingleton().getSocketRecvBuffer( socketID )->push( (char*)&buf, recvlen );
//kbp->getExecInterval();
    } 
    /* 处理每个新连接上的数据收发结束 */
    return recvlen;
}

|


class Mutex{...}
class Lock{...}
class ScopeLock{...}

void work_for_client( int client_fd){
   ScopeLock( mutexs[ client_fd]);
   //now, work for client_fd, it is locked.
}

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • epoll中epoll_event结构体的含义
  • epoll_ctl(,EPOLL_CTL_DEL,); 的问题!!!
  • 第一次用epoll就傻眼,程序报create_epoll error Function not implemented
  • 为Qt添加epoll的高性能I/O复用 qt_eventdispatcher_epoll
  • epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event)为何老返回-1
  • epoll 退出
  • 关于epoll的几个疑问
  • 大家好,问个问题,关于EPOLL的。。。
  • 有人碰到过epoll丢信号吗
  • epoll异常问题
  • epoll模型如何限制最大连接数
  • epoll可读的问题
  • python实现Linux异步epoll代码
  • 请问: 当服务器采用epoll 时,客户端连不上,但若服务器端不用epoll时,也连上并发消息,这是为什么啊 iis7站长之家
  • epoll,socket超时如何设置?
  • epoll的一个问题
  • 关于epoll的链接库
  • 谁能解释一下epoll、libevent、zeroMQ的区别?
  • epoll 丢事件
  • 我已经升级内核到2.6,但是为什么还是不能用epoll?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3