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

epoll的一个问题

    来源: 互联网  发布时间:2016-08-11

    本文导语:  今天我用到epoll来监听客户端连到服务器的消息。每次我把accept的一个socket赋到epoll_event.data.fd里面去的时候,在epoll_wait到消息时我读取data.fd,却出现了个不该出现的数字,但是epoll_event.data.ptr里面的指向的东西却是...

今天我用到epoll来监听客户端连到服务器的消息。每次我把accept的一个socket赋到epoll_event.data.fd里面去的时候,在epoll_wait到消息时我读取data.fd,却出现了个不该出现的数字,但是epoll_event.data.ptr里面的指向的东西却是正确的,请问有谁能分享下,究竟是为什么么?结果我就把socket给封装起来给ptr指过去,这样问题就解决了,但是我就是搞不懂为什么fd会出现乱的数据。

|
还是不太明白你的问题,epoll我也就写过些简单程序,说下我的理解,大家讨论下。
ev.data.fd = client;是accept后,注册到epoll的socket对吗?那么发生EPOLLIN事件时,收到消息的socket就是ev.data.fd,但是如果有多个client同时给你的sever程序发送信息时,这个ev.data.fd和你刚才accept的可能就不是一个了。因此我想说的是,你在EPOLLIN发生时,你把所有的ev.data.fd都打印出来了吗?

另外,ev.data.ptr,个人认为就是为了保存一些必要的数据,所以你赋的值没有变。

|
没有遇到你说的问题
struct epoll_event ev;
ev.data.fd = client;
ev.events  = EPOLLIN;
epoll_ctl(........)

.............

int fds = epoll_wait(.............)
for(int i =0;....)
{
   int nRecvSockFD = EpollEvents[i]).data.fd;
.............................
}
不知道你说的不应该出现的是什么
有机会想交流一把你是用epoll 的流程,我没有用到epoll_event.data.ptr就ok了
qq957863054

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












  • 相关文章推荐
  • epoll中epoll_event结构体的含义
  • 第一次用epoll就傻眼,程序报create_epoll error Function not implemented
  • 为Qt添加epoll的高性能I/O复用 qt_eventdispatcher_epoll
  • 请问: 当服务器采用epoll 时,客户端连不上,但若服务器端不用epoll时,也连上并发消息,这是为什么啊
  • epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event)为何老返回-1
  • epoll 退出
  • 关于epoll的几个疑问
  • 有人碰到过epoll丢信号吗
  • epoll模型如何限制最大连接数
  • python实现Linux异步epoll代码
  • epoll多路复用模型的疑惑,请高手解答
  • epoll,socket超时如何设置?
  • linux并发服务器中epoll+多线程分别怎么理解?
  • 关于epoll的链接库
  • 谁能解释一下epoll、libevent、zeroMQ的区别?
  • epoll 丢事件
  • 我已经升级内核到2.6,但是为什么还是不能用epoll?
  • int epoll_create(int size) size参数的含义
  • 使用 epoll或poll ,如何确定 与客户端的链接断开 ?
  • 最近在看EPOLL。。。。


  • 站内导航:


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

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

    浙ICP备11055608号-3