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

来源:互联网 发布:有名的软件供应商 编辑:程序博客网 时间:2024/06/05 03:32

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句柄读取数据了
0 0
原创粉丝点击