libc_core/poll.rs
1//! This module provides the `libc` types for Poll (polling).
2//!
3//! MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/poll.h>
4
5bitflags! {
6 /// Poll 事件类型(类似于 epoll 的事件掩码)
7 ///
8 /// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/poll.h#L12>
9 #[derive(Debug, Clone, PartialEq)]
10 pub struct PollEvent: u16 {
11 /// 无事件(默认值)
12 const NONE = 0;
13 /// 有数据可读
14 const IN = 0x001;
15 /// 有紧急数据可读(带外数据)
16 const PRI = 0x002;
17 /// 可写数据(缓冲区未满)
18 const OUT = 0x004;
19 /// 普通数据可读(等价于 POLLIN,用于区分优先级)
20 const RDNORM = 0x040;
21 /// 带外数据可读
22 const RDBAND = 0x080;
23 /// 普通数据可写(等价于 POLLOUT,用于区分优先级)
24 const WRNORM = 0x100;
25 /// 带外数据可写
26 const WRBAND = 0x200;
27 /// Linux 特有,可能与消息通知相关(通常不使用)
28 const MSG = 0x400;
29 /// 从 epoll 或 poll 实例中移除此文件描述符(Linux 特有)
30 const REMOVE = 0x1000;
31 /// 远端关闭(对端 shutdown write 或关闭 socket)
32 const RDHUP = 0x2000;
33 /// 错误事件(如写管道时接收端关闭)
34 /// 不需要显式监听,默认总是报告
35 const ERR = 0x008;
36 /// 挂起事件(如对端关闭连接)
37 /// 不需要显式监听,默认总是报告
38 const HUP = 0x010;
39 /// 无效的请求(如监听了一个无效的 fd)
40 /// 不需要显式监听,默认总是报告
41 const NVAL = 0x020;
42 }
43}
44
45#[repr(C)]
46#[derive(Debug, Clone)]
47/// 用于 poll 系统调用的文件描述符结构体
48///
49/// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/poll.h#L31>
50pub struct PollFd {
51 /// 文件描述符(File Descriptor),要监视的对象
52 pub fd: u32,
53 /// 期望监听的事件(如可读、可写等),由用户设置
54 pub events: PollEvent,
55 /// 实际发生的事件,由内核填写
56 pub revents: PollEvent,
57}