关于epoll中event.data联合体的疑问解决方法

http://www.myexception.cn/c/225579.html


关于epoll中event.data联合体的疑问

typedef union epoll_data
{
  void *ptr;
  int fd;
  uint32_t u32;
  uint64_t u64;
} epoll_data_t;
 
struct epoll_event
{
  uint32_t events; /* Epoll events */
  epoll_data_t data; /* User data variable */
};

为什么
epoll_data_t要被定义成union类型呢,是节省了空间,但是这样的设计使得fd和ptr用户数据字段不能共同使用了。

在epoll_wait返回时,data.fd字段存的是满足条件的描述符,肯定有用,但是ptr字段的值就无效了啊,大家都是怎么利用这个ptr字段的,我在为每个连接分配缓冲区时遇到这个问题,我想用这个指针把对应这个连接的buf地址传入,可是由于是union,就不行了。

------解决方案--------------------
用ptr指向你自己定义的结构不就可以了?有指针了不就什么都有了?
epoll_wait返回的是一个epoll_event的指针,所有有数据需要处理的数据都在里面了,自己写循环取就是了

------解决方案--------------------
epoll_data 其实就是自己的数据,直接的说就是一个8个字节的空间,你在注册之前把自己要在事件触发的时想的得到的数据写进去,比如socket句柄, 事件触发时,你就可以使用socket句柄读取数据了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值