栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

epoll

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

epoll

问题描述:练习代码时,有这样一句代码 int32_t eventCount = epoll_wait(mPollFd, mEventData, MAX_EPOLL_SIZE, -1); 当作服务端,然后用一个客户端去连接,连接上后eventCount返回是正常的,为1,但在处理fd时,即打印有:

printf("fd = %d event happen!n", mEventData[i].data.fd); 打印出来的 fd一直是0,并不等于之前调用int32_t ret = epoll_ctl(mPollFd, EPOLL_CTL_ADD, eventHandle.mFd, &event);注册的fd,网上搜索半天没找到答案。最后才发现是自己疏忽了,没注意看结构体struct epoll_event 导致这个低级错误。

首先看struct epoll_event结构体:

typedef union epoll_data
{
  void *ptr;
  int fd;
  uint32_t u32;
  uint64_t u64;
} epoll_data_t;

注意:这是一个联合体。即只要赋值一个就可以了。

我的代码是这样的:

在给fd赋值后,又给u64赋0了,那这样fd在取值的时候也成了0。因为int32_t eventCount = epoll_wait(mPollFd, mEventData, MAX_EPOLL_SIZE, -1);返回的mEventData不会修改里面的fd,所以每次有读事件时,去取mEventData里的fd时一直是0。去掉event.data.u64 = 0;或是放到上一行前面都可以。

 再编译跑起来,获取fd正常了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/713554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号