comparison third_party/libuv/docs/src/poll.rst @ 160:948de3f54cea

[ThirdParty] Added libuv
author June Park <parkjune1995@gmail.com>
date Wed, 14 Jan 2026 19:39:52 -0800
parents
children
comparison
equal deleted inserted replaced
159:05cf9467a1c3 160:948de3f54cea
1
2 .. _poll:
3
4 :c:type:`uv_poll_t` --- Poll handle
5 ===================================
6
7 Poll handles are used to watch file descriptors for readability,
8 writability and disconnection similar to the purpose of :man:`poll(2)`.
9
10 The purpose of poll handles is to enable integrating external libraries that
11 rely on the event loop to signal it about the socket status changes, like
12 c-ares or libssh2. Using uv_poll_t for any other purpose is not recommended;
13 :c:type:`uv_tcp_t`, :c:type:`uv_udp_t`, etc. provide an implementation that is faster and
14 more scalable than what can be achieved with :c:type:`uv_poll_t`, especially on
15 Windows.
16
17 It is possible that poll handles occasionally signal that a file descriptor is
18 readable or writable even when it isn't. The user should therefore always
19 be prepared to handle EAGAIN or equivalent when it attempts to read from or
20 write to the fd.
21
22 It is not okay to have multiple active poll handles for the same socket, this
23 can cause libuv to busyloop or otherwise malfunction.
24
25 The user should not close a file descriptor while it is being polled by an
26 active poll handle. This can cause the handle to report an error,
27 but it might also start polling another socket. However the fd can be safely
28 closed immediately after a call to :c:func:`uv_poll_stop` or :c:func:`uv_close`.
29
30 .. note::
31 On windows only sockets can be polled with poll handles. On Unix any file
32 descriptor that would be accepted by :man:`poll(2)` can be used.
33
34 .. note::
35 On AIX, watching for disconnection is not supported.
36
37 Data types
38 ----------
39
40 .. c:type:: uv_poll_t
41
42 Poll handle type.
43
44 .. c:type:: void (*uv_poll_cb)(uv_poll_t* handle, int status, int events)
45
46 Type definition for callback passed to :c:func:`uv_poll_start`.
47
48 .. c:enum:: uv_poll_event
49
50 Poll event types
51
52 ::
53
54 enum uv_poll_event {
55 UV_READABLE = 1,
56 UV_WRITABLE = 2,
57 UV_DISCONNECT = 4,
58 UV_PRIORITIZED = 8
59 };
60
61
62 Public members
63 ^^^^^^^^^^^^^^
64
65 N/A
66
67 .. seealso:: The :c:type:`uv_handle_t` members also apply.
68
69
70 API
71 ---
72
73 .. c:function:: int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd)
74
75 Initialize the handle using a file descriptor.
76
77 .. versionchanged:: 1.2.2 the file descriptor is set to non-blocking mode.
78
79 .. c:function:: int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, uv_os_sock_t socket)
80
81 Initialize the handle using a socket descriptor. On Unix this is identical
82 to :c:func:`uv_poll_init`. On windows it takes a SOCKET handle.
83
84 .. versionchanged:: 1.2.2 the socket is set to non-blocking mode.
85
86 .. c:function:: int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb)
87
88 Starts polling the file descriptor. `events` is a bitmask made up of
89 `UV_READABLE`, `UV_WRITABLE`, `UV_PRIORITIZED` and `UV_DISCONNECT`. As soon
90 as an event is detected the callback will be called with `status` set to 0,
91 and the detected events set on the `events` field.
92
93 The `UV_PRIORITIZED` event is used to watch for sysfs interrupts or TCP
94 out-of-band messages.
95
96 The `UV_DISCONNECT` event is optional in the sense that it may not be
97 reported and the user is free to ignore it, but it can help optimize the
98 shutdown path because an extra read or write call might be avoided.
99
100 If an error happens while polling, `status` will be < 0 and corresponds
101 with one of the `UV_E*` error codes (see :ref:`errors`). The user should
102 not close the socket while the handle is active. If the user does that
103 anyway, the callback *may* be called reporting an error status, but this is
104 **not** guaranteed. If `status == UV_EBADF` polling is discontinued for the
105 file handle and no further events will be reported. The user should
106 then call :c:func:`uv_close` on the handle.
107
108 .. note::
109 Calling :c:func:`uv_poll_start` on a handle that is already active is
110 fine. Doing so will update the events mask that is being watched for.
111
112 .. note::
113 Though `UV_DISCONNECT` can be set, it is unsupported on AIX and as such
114 will not be set on the `events` field in the callback.
115
116 .. note::
117 If one of the events `UV_READABLE` or `UV_WRITABLE` are set, the
118 callback will be called again, as long as the given fd/socket remains
119 readable or writable accordingly. Particularly in each of the following
120 scenarios:
121
122 * The callback has been called because the socket became
123 readable/writable and the callback did not conduct a read/write on
124 this socket at all.
125 * The callback committed a read on the socket, and has not read all the
126 available data (when `UV_READABLE` is set).
127 * The callback committed a write on the socket, but it remained
128 writable afterwards (when `UV_WRITABLE` is set).
129 * The socket has already became readable/writable before calling
130 :c:func:`uv_poll_start` on a poll handle associated with this socket,
131 and since then the state of the socket did not changed.
132
133 In all of the above listed scenarios, the socket remains readable or
134 writable and hence the callback will be called again (depending on the
135 events set in the bitmask). This behaviour is known as level
136 triggering.
137
138 .. versionchanged:: 1.9.0 Added the `UV_DISCONNECT` event.
139 .. versionchanged:: 1.14.0 Added the `UV_PRIORITIZED` event.
140
141 .. c:function:: int uv_poll_stop(uv_poll_t* poll)
142
143 Stop polling the file descriptor, the callback will no longer be called.
144
145 .. note::
146 Calling :c:func:`uv_poll_stop` is effective immediately: any pending
147 callback is also canceled, even if the socket state change notification
148 was already pending.
149
150 .. seealso:: The :c:type:`uv_handle_t` API functions also apply.