当前位置: 技术问答>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,个人认为就是为了保存一些必要的数据,所以你赋的值没有变。
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
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