请问epoll_wait返回的poll_events中的变量为什么为0

aayy 2011-02-14 04:42:05
使用epoll_ctl(epollHandle, EPOLL_CTL_ADD, g_hWatchSocket, &ev)设置了g_hWatchSocket对应的ev,
但是在epoll_wait之后, poll_events[i].data.fd;的值为0,

此时使用recvfrom(g_hWatchSocket, (s8 *)pBuf, dwBufLen, 0 , NULL, NULL);还是可以收到包的


u32 dwBufLen = 2048;
u8 *pBuf = new u8[dwBufLen+1];


g_hWatchSocket = socket(AF_INET, SOCK_DGRAM, 0);

SOCKADDR_IN addr;
memset(&addr, 0, sizeof(SOCKADDR_IN));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = 0;
addr.sin_port = htons(2500);

bind(g_hWatchSocket, (sockaddr *)&addr, sizeof(SOCKADDR_IN)))

SetNonBlocking(g_hWatchSocket);

struct epoll_event ev, poll_events[100];

ev.data.fd = g_hWatchSocket;
ev.events = EPOLLIN|EPOLLET;

int epollHandle = epoll_create(100);
int ret = epoll_ctl(epollHandle, EPOLL_CTL_ADD, g_hWatchSocket, &ev);


while(1)
{
nEventNum = epoll_wait(epollHandle, poll_events, 100, 800);

for(int i=0; i < nEventNum; i++)
{
为什么这里得到的sockfd是0呢????
sockfd = poll_events[i].data.fd;



//重新设置g_hWatchSocket的监控类型
ev.data.fd = g_hWatchSocket;
ev.events = EPOLLIN | EPOLLET;
epoll_ctl(epollHandle, EPOLL_CTL_MOD, g_hWatchSocket, &ev);


}
}//for(int i=0;i<nEventNum;i++)
}//while(1)
...全文
295 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhucz333 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 aayy 的回复:]

已解决。内核版本和编译器不同步
[/Quote]


这个什么意思呀。我现在也遇到这个问题了,不知道怎么解决。
aayy 2011-02-15
  • 打赏
  • 举报
回复
已解决。内核版本和编译器不同步
aayy 2011-02-14
  • 打赏
  • 举报
回复
g_hWatchSocket = socket(AF_INET, SOCK_DGRAM, 0);
创建socket时,已经包这个描述符答应出来了, 不为0
aayy 2011-02-14
  • 打赏
  • 举报
回复
前面套接字创建都是正常的,向g_hWatchSocket发送数据包
epoll_wait返回后参数是错误的

while(1)
{
nEventNum = epoll_wait(epollHandle, poll_events, 100, 800);

for(int i=0; i < nEventNum; i++)
{
为什么这里得到的sockfd是0呢??它应该等于g_hWatchSocket
sockfd = poll_events[i].data.fd;

recvfrom(g_hWatchSocket, (s8 *)pBuf, dwBufLen, 0 , NULL, NULL);//可以收到数据

//重新设置g_hWatchSocket的监控类型
ev.data.fd = g_hWatchSocket;
ev.events = EPOLLIN | EPOLLET;
epoll_ctl(epollHandle, EPOLL_CTL_MOD, g_hWatchSocket, &ev);


}
}//for(int i=0;i<nEventNum;i++)
}//while(1)
justkk 2011-02-14
  • 打赏
  • 举报
回复
0 也是一个合法的文件描述符啊

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧