1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4 
5 PyDoc_STRVAR(select_select__doc__,
6 "select($module, rlist, wlist, xlist, timeout=None, /)\n"
7 "--\n"
8 "\n"
9 "Wait until one or more file descriptors are ready for some kind of I/O.\n"
10 "\n"
11 "The first three arguments are iterables of file descriptors to be waited for:\n"
12 "rlist -- wait until ready for reading\n"
13 "wlist -- wait until ready for writing\n"
14 "xlist -- wait for an \"exceptional condition\"\n"
15 "If only one kind of condition is required, pass [] for the other lists.\n"
16 "\n"
17 "A file descriptor is either a socket or file object, or a small integer\n"
18 "gotten from a fileno() method call on one of those.\n"
19 "\n"
20 "The optional 4th argument specifies a timeout in seconds; it may be\n"
21 "a floating point number to specify fractions of seconds.  If it is absent\n"
22 "or None, the call will never time out.\n"
23 "\n"
24 "The return value is a tuple of three lists corresponding to the first three\n"
25 "arguments; each contains the subset of the corresponding file descriptors\n"
26 "that are ready.\n"
27 "\n"
28 "*** IMPORTANT NOTICE ***\n"
29 "On Windows, only sockets are supported; on Unix, all file\n"
30 "descriptors can be used.");
31 
32 #define SELECT_SELECT_METHODDEF    \
33     {"select", _PyCFunction_CAST(select_select), METH_FASTCALL, select_select__doc__},
34 
35 static PyObject *
36 select_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist,
37                    PyObject *xlist, PyObject *timeout_obj);
38 
39 static PyObject *
select_select(PyObject * module,PyObject * const * args,Py_ssize_t nargs)40 select_select(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
41 {
42     PyObject *return_value = NULL;
43     PyObject *rlist;
44     PyObject *wlist;
45     PyObject *xlist;
46     PyObject *timeout_obj = Py_None;
47 
48     if (!_PyArg_CheckPositional("select", nargs, 3, 4)) {
49         goto exit;
50     }
51     rlist = args[0];
52     wlist = args[1];
53     xlist = args[2];
54     if (nargs < 4) {
55         goto skip_optional;
56     }
57     timeout_obj = args[3];
58 skip_optional:
59     return_value = select_select_impl(module, rlist, wlist, xlist, timeout_obj);
60 
61 exit:
62     return return_value;
63 }
64 
65 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL))
66 
67 PyDoc_STRVAR(select_poll_register__doc__,
68 "register($self, fd,\n"
69 "         eventmask=select.POLLIN | select.POLLPRI | select.POLLOUT, /)\n"
70 "--\n"
71 "\n"
72 "Register a file descriptor with the polling object.\n"
73 "\n"
74 "  fd\n"
75 "    either an integer, or an object with a fileno() method returning an int\n"
76 "  eventmask\n"
77 "    an optional bitmask describing the type of events to check for");
78 
79 #define SELECT_POLL_REGISTER_METHODDEF    \
80     {"register", _PyCFunction_CAST(select_poll_register), METH_FASTCALL, select_poll_register__doc__},
81 
82 static PyObject *
83 select_poll_register_impl(pollObject *self, int fd, unsigned short eventmask);
84 
85 static PyObject *
select_poll_register(pollObject * self,PyObject * const * args,Py_ssize_t nargs)86 select_poll_register(pollObject *self, PyObject *const *args, Py_ssize_t nargs)
87 {
88     PyObject *return_value = NULL;
89     int fd;
90     unsigned short eventmask = POLLIN | POLLPRI | POLLOUT;
91 
92     if (!_PyArg_CheckPositional("register", nargs, 1, 2)) {
93         goto exit;
94     }
95     if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
96         goto exit;
97     }
98     if (nargs < 2) {
99         goto skip_optional;
100     }
101     if (!_PyLong_UnsignedShort_Converter(args[1], &eventmask)) {
102         goto exit;
103     }
104 skip_optional:
105     return_value = select_poll_register_impl(self, fd, eventmask);
106 
107 exit:
108     return return_value;
109 }
110 
111 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */
112 
113 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL))
114 
115 PyDoc_STRVAR(select_poll_modify__doc__,
116 "modify($self, fd, eventmask, /)\n"
117 "--\n"
118 "\n"
119 "Modify an already registered file descriptor.\n"
120 "\n"
121 "  fd\n"
122 "    either an integer, or an object with a fileno() method returning\n"
123 "    an int\n"
124 "  eventmask\n"
125 "    a bitmask describing the type of events to check for");
126 
127 #define SELECT_POLL_MODIFY_METHODDEF    \
128     {"modify", _PyCFunction_CAST(select_poll_modify), METH_FASTCALL, select_poll_modify__doc__},
129 
130 static PyObject *
131 select_poll_modify_impl(pollObject *self, int fd, unsigned short eventmask);
132 
133 static PyObject *
select_poll_modify(pollObject * self,PyObject * const * args,Py_ssize_t nargs)134 select_poll_modify(pollObject *self, PyObject *const *args, Py_ssize_t nargs)
135 {
136     PyObject *return_value = NULL;
137     int fd;
138     unsigned short eventmask;
139 
140     if (!_PyArg_CheckPositional("modify", nargs, 2, 2)) {
141         goto exit;
142     }
143     if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
144         goto exit;
145     }
146     if (!_PyLong_UnsignedShort_Converter(args[1], &eventmask)) {
147         goto exit;
148     }
149     return_value = select_poll_modify_impl(self, fd, eventmask);
150 
151 exit:
152     return return_value;
153 }
154 
155 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */
156 
157 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL))
158 
159 PyDoc_STRVAR(select_poll_unregister__doc__,
160 "unregister($self, fd, /)\n"
161 "--\n"
162 "\n"
163 "Remove a file descriptor being tracked by the polling object.");
164 
165 #define SELECT_POLL_UNREGISTER_METHODDEF    \
166     {"unregister", (PyCFunction)select_poll_unregister, METH_O, select_poll_unregister__doc__},
167 
168 static PyObject *
169 select_poll_unregister_impl(pollObject *self, int fd);
170 
171 static PyObject *
select_poll_unregister(pollObject * self,PyObject * arg)172 select_poll_unregister(pollObject *self, PyObject *arg)
173 {
174     PyObject *return_value = NULL;
175     int fd;
176 
177     if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
178         goto exit;
179     }
180     return_value = select_poll_unregister_impl(self, fd);
181 
182 exit:
183     return return_value;
184 }
185 
186 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */
187 
188 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL))
189 
190 PyDoc_STRVAR(select_poll_poll__doc__,
191 "poll($self, timeout=None, /)\n"
192 "--\n"
193 "\n"
194 "Polls the set of registered file descriptors.\n"
195 "\n"
196 "  timeout\n"
197 "    The maximum time to wait in milliseconds, or else None (or a negative\n"
198 "    value) to wait indefinitely.\n"
199 "\n"
200 "Returns a list containing any descriptors that have events or errors to\n"
201 "report, as a list of (fd, event) 2-tuples.");
202 
203 #define SELECT_POLL_POLL_METHODDEF    \
204     {"poll", _PyCFunction_CAST(select_poll_poll), METH_FASTCALL, select_poll_poll__doc__},
205 
206 static PyObject *
207 select_poll_poll_impl(pollObject *self, PyObject *timeout_obj);
208 
209 static PyObject *
select_poll_poll(pollObject * self,PyObject * const * args,Py_ssize_t nargs)210 select_poll_poll(pollObject *self, PyObject *const *args, Py_ssize_t nargs)
211 {
212     PyObject *return_value = NULL;
213     PyObject *timeout_obj = Py_None;
214 
215     if (!_PyArg_CheckPositional("poll", nargs, 0, 1)) {
216         goto exit;
217     }
218     if (nargs < 1) {
219         goto skip_optional;
220     }
221     timeout_obj = args[0];
222 skip_optional:
223     return_value = select_poll_poll_impl(self, timeout_obj);
224 
225 exit:
226     return return_value;
227 }
228 
229 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */
230 
231 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H)
232 
233 PyDoc_STRVAR(select_devpoll_register__doc__,
234 "register($self, fd,\n"
235 "         eventmask=select.POLLIN | select.POLLPRI | select.POLLOUT, /)\n"
236 "--\n"
237 "\n"
238 "Register a file descriptor with the polling object.\n"
239 "\n"
240 "  fd\n"
241 "    either an integer, or an object with a fileno() method returning\n"
242 "    an int\n"
243 "  eventmask\n"
244 "    an optional bitmask describing the type of events to check for");
245 
246 #define SELECT_DEVPOLL_REGISTER_METHODDEF    \
247     {"register", _PyCFunction_CAST(select_devpoll_register), METH_FASTCALL, select_devpoll_register__doc__},
248 
249 static PyObject *
250 select_devpoll_register_impl(devpollObject *self, int fd,
251                              unsigned short eventmask);
252 
253 static PyObject *
select_devpoll_register(devpollObject * self,PyObject * const * args,Py_ssize_t nargs)254 select_devpoll_register(devpollObject *self, PyObject *const *args, Py_ssize_t nargs)
255 {
256     PyObject *return_value = NULL;
257     int fd;
258     unsigned short eventmask = POLLIN | POLLPRI | POLLOUT;
259 
260     if (!_PyArg_CheckPositional("register", nargs, 1, 2)) {
261         goto exit;
262     }
263     if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
264         goto exit;
265     }
266     if (nargs < 2) {
267         goto skip_optional;
268     }
269     if (!_PyLong_UnsignedShort_Converter(args[1], &eventmask)) {
270         goto exit;
271     }
272 skip_optional:
273     return_value = select_devpoll_register_impl(self, fd, eventmask);
274 
275 exit:
276     return return_value;
277 }
278 
279 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */
280 
281 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H)
282 
283 PyDoc_STRVAR(select_devpoll_modify__doc__,
284 "modify($self, fd,\n"
285 "       eventmask=select.POLLIN | select.POLLPRI | select.POLLOUT, /)\n"
286 "--\n"
287 "\n"
288 "Modify a possible already registered file descriptor.\n"
289 "\n"
290 "  fd\n"
291 "    either an integer, or an object with a fileno() method returning\n"
292 "    an int\n"
293 "  eventmask\n"
294 "    an optional bitmask describing the type of events to check for");
295 
296 #define SELECT_DEVPOLL_MODIFY_METHODDEF    \
297     {"modify", _PyCFunction_CAST(select_devpoll_modify), METH_FASTCALL, select_devpoll_modify__doc__},
298 
299 static PyObject *
300 select_devpoll_modify_impl(devpollObject *self, int fd,
301                            unsigned short eventmask);
302 
303 static PyObject *
select_devpoll_modify(devpollObject * self,PyObject * const * args,Py_ssize_t nargs)304 select_devpoll_modify(devpollObject *self, PyObject *const *args, Py_ssize_t nargs)
305 {
306     PyObject *return_value = NULL;
307     int fd;
308     unsigned short eventmask = POLLIN | POLLPRI | POLLOUT;
309 
310     if (!_PyArg_CheckPositional("modify", nargs, 1, 2)) {
311         goto exit;
312     }
313     if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
314         goto exit;
315     }
316     if (nargs < 2) {
317         goto skip_optional;
318     }
319     if (!_PyLong_UnsignedShort_Converter(args[1], &eventmask)) {
320         goto exit;
321     }
322 skip_optional:
323     return_value = select_devpoll_modify_impl(self, fd, eventmask);
324 
325 exit:
326     return return_value;
327 }
328 
329 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */
330 
331 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H)
332 
333 PyDoc_STRVAR(select_devpoll_unregister__doc__,
334 "unregister($self, fd, /)\n"
335 "--\n"
336 "\n"
337 "Remove a file descriptor being tracked by the polling object.");
338 
339 #define SELECT_DEVPOLL_UNREGISTER_METHODDEF    \
340     {"unregister", (PyCFunction)select_devpoll_unregister, METH_O, select_devpoll_unregister__doc__},
341 
342 static PyObject *
343 select_devpoll_unregister_impl(devpollObject *self, int fd);
344 
345 static PyObject *
select_devpoll_unregister(devpollObject * self,PyObject * arg)346 select_devpoll_unregister(devpollObject *self, PyObject *arg)
347 {
348     PyObject *return_value = NULL;
349     int fd;
350 
351     if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
352         goto exit;
353     }
354     return_value = select_devpoll_unregister_impl(self, fd);
355 
356 exit:
357     return return_value;
358 }
359 
360 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */
361 
362 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H)
363 
364 PyDoc_STRVAR(select_devpoll_poll__doc__,
365 "poll($self, timeout=None, /)\n"
366 "--\n"
367 "\n"
368 "Polls the set of registered file descriptors.\n"
369 "\n"
370 "  timeout\n"
371 "    The maximum time to wait in milliseconds, or else None (or a negative\n"
372 "    value) to wait indefinitely.\n"
373 "\n"
374 "Returns a list containing any descriptors that have events or errors to\n"
375 "report, as a list of (fd, event) 2-tuples.");
376 
377 #define SELECT_DEVPOLL_POLL_METHODDEF    \
378     {"poll", _PyCFunction_CAST(select_devpoll_poll), METH_FASTCALL, select_devpoll_poll__doc__},
379 
380 static PyObject *
381 select_devpoll_poll_impl(devpollObject *self, PyObject *timeout_obj);
382 
383 static PyObject *
select_devpoll_poll(devpollObject * self,PyObject * const * args,Py_ssize_t nargs)384 select_devpoll_poll(devpollObject *self, PyObject *const *args, Py_ssize_t nargs)
385 {
386     PyObject *return_value = NULL;
387     PyObject *timeout_obj = Py_None;
388 
389     if (!_PyArg_CheckPositional("poll", nargs, 0, 1)) {
390         goto exit;
391     }
392     if (nargs < 1) {
393         goto skip_optional;
394     }
395     timeout_obj = args[0];
396 skip_optional:
397     return_value = select_devpoll_poll_impl(self, timeout_obj);
398 
399 exit:
400     return return_value;
401 }
402 
403 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */
404 
405 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H)
406 
407 PyDoc_STRVAR(select_devpoll_close__doc__,
408 "close($self, /)\n"
409 "--\n"
410 "\n"
411 "Close the devpoll file descriptor.\n"
412 "\n"
413 "Further operations on the devpoll object will raise an exception.");
414 
415 #define SELECT_DEVPOLL_CLOSE_METHODDEF    \
416     {"close", (PyCFunction)select_devpoll_close, METH_NOARGS, select_devpoll_close__doc__},
417 
418 static PyObject *
419 select_devpoll_close_impl(devpollObject *self);
420 
421 static PyObject *
select_devpoll_close(devpollObject * self,PyObject * Py_UNUSED (ignored))422 select_devpoll_close(devpollObject *self, PyObject *Py_UNUSED(ignored))
423 {
424     return select_devpoll_close_impl(self);
425 }
426 
427 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */
428 
429 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H)
430 
431 PyDoc_STRVAR(select_devpoll_fileno__doc__,
432 "fileno($self, /)\n"
433 "--\n"
434 "\n"
435 "Return the file descriptor.");
436 
437 #define SELECT_DEVPOLL_FILENO_METHODDEF    \
438     {"fileno", (PyCFunction)select_devpoll_fileno, METH_NOARGS, select_devpoll_fileno__doc__},
439 
440 static PyObject *
441 select_devpoll_fileno_impl(devpollObject *self);
442 
443 static PyObject *
select_devpoll_fileno(devpollObject * self,PyObject * Py_UNUSED (ignored))444 select_devpoll_fileno(devpollObject *self, PyObject *Py_UNUSED(ignored))
445 {
446     return select_devpoll_fileno_impl(self);
447 }
448 
449 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */
450 
451 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL))
452 
453 PyDoc_STRVAR(select_poll__doc__,
454 "poll($module, /)\n"
455 "--\n"
456 "\n"
457 "Returns a polling object.\n"
458 "\n"
459 "This object supports registering and unregistering file descriptors, and then\n"
460 "polling them for I/O events.");
461 
462 #define SELECT_POLL_METHODDEF    \
463     {"poll", (PyCFunction)select_poll, METH_NOARGS, select_poll__doc__},
464 
465 static PyObject *
466 select_poll_impl(PyObject *module);
467 
468 static PyObject *
select_poll(PyObject * module,PyObject * Py_UNUSED (ignored))469 select_poll(PyObject *module, PyObject *Py_UNUSED(ignored))
470 {
471     return select_poll_impl(module);
472 }
473 
474 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */
475 
476 #if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H)
477 
478 PyDoc_STRVAR(select_devpoll__doc__,
479 "devpoll($module, /)\n"
480 "--\n"
481 "\n"
482 "Returns a polling object.\n"
483 "\n"
484 "This object supports registering and unregistering file descriptors, and then\n"
485 "polling them for I/O events.");
486 
487 #define SELECT_DEVPOLL_METHODDEF    \
488     {"devpoll", (PyCFunction)select_devpoll, METH_NOARGS, select_devpoll__doc__},
489 
490 static PyObject *
491 select_devpoll_impl(PyObject *module);
492 
493 static PyObject *
select_devpoll(PyObject * module,PyObject * Py_UNUSED (ignored))494 select_devpoll(PyObject *module, PyObject *Py_UNUSED(ignored))
495 {
496     return select_devpoll_impl(module);
497 }
498 
499 #endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */
500 
501 #if defined(HAVE_EPOLL)
502 
503 PyDoc_STRVAR(select_epoll__doc__,
504 "epoll(sizehint=-1, flags=0)\n"
505 "--\n"
506 "\n"
507 "Returns an epolling object.\n"
508 "\n"
509 "  sizehint\n"
510 "    The expected number of events to be registered.  It must be positive,\n"
511 "    or -1 to use the default.  It is only used on older systems where\n"
512 "    epoll_create1() is not available; otherwise it has no effect (though its\n"
513 "    value is still checked).\n"
514 "  flags\n"
515 "    Deprecated and completely ignored.  However, when supplied, its value\n"
516 "    must be 0 or select.EPOLL_CLOEXEC, otherwise OSError is raised.");
517 
518 static PyObject *
519 select_epoll_impl(PyTypeObject *type, int sizehint, int flags);
520 
521 static PyObject *
select_epoll(PyTypeObject * type,PyObject * args,PyObject * kwargs)522 select_epoll(PyTypeObject *type, PyObject *args, PyObject *kwargs)
523 {
524     PyObject *return_value = NULL;
525     static const char * const _keywords[] = {"sizehint", "flags", NULL};
526     static _PyArg_Parser _parser = {NULL, _keywords, "epoll", 0};
527     PyObject *argsbuf[2];
528     PyObject * const *fastargs;
529     Py_ssize_t nargs = PyTuple_GET_SIZE(args);
530     Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
531     int sizehint = -1;
532     int flags = 0;
533 
534     fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 2, 0, argsbuf);
535     if (!fastargs) {
536         goto exit;
537     }
538     if (!noptargs) {
539         goto skip_optional_pos;
540     }
541     if (fastargs[0]) {
542         sizehint = _PyLong_AsInt(fastargs[0]);
543         if (sizehint == -1 && PyErr_Occurred()) {
544             goto exit;
545         }
546         if (!--noptargs) {
547             goto skip_optional_pos;
548         }
549     }
550     flags = _PyLong_AsInt(fastargs[1]);
551     if (flags == -1 && PyErr_Occurred()) {
552         goto exit;
553     }
554 skip_optional_pos:
555     return_value = select_epoll_impl(type, sizehint, flags);
556 
557 exit:
558     return return_value;
559 }
560 
561 #endif /* defined(HAVE_EPOLL) */
562 
563 #if defined(HAVE_EPOLL)
564 
565 PyDoc_STRVAR(select_epoll_close__doc__,
566 "close($self, /)\n"
567 "--\n"
568 "\n"
569 "Close the epoll control file descriptor.\n"
570 "\n"
571 "Further operations on the epoll object will raise an exception.");
572 
573 #define SELECT_EPOLL_CLOSE_METHODDEF    \
574     {"close", (PyCFunction)select_epoll_close, METH_NOARGS, select_epoll_close__doc__},
575 
576 static PyObject *
577 select_epoll_close_impl(pyEpoll_Object *self);
578 
579 static PyObject *
select_epoll_close(pyEpoll_Object * self,PyObject * Py_UNUSED (ignored))580 select_epoll_close(pyEpoll_Object *self, PyObject *Py_UNUSED(ignored))
581 {
582     return select_epoll_close_impl(self);
583 }
584 
585 #endif /* defined(HAVE_EPOLL) */
586 
587 #if defined(HAVE_EPOLL)
588 
589 PyDoc_STRVAR(select_epoll_fileno__doc__,
590 "fileno($self, /)\n"
591 "--\n"
592 "\n"
593 "Return the epoll control file descriptor.");
594 
595 #define SELECT_EPOLL_FILENO_METHODDEF    \
596     {"fileno", (PyCFunction)select_epoll_fileno, METH_NOARGS, select_epoll_fileno__doc__},
597 
598 static PyObject *
599 select_epoll_fileno_impl(pyEpoll_Object *self);
600 
601 static PyObject *
select_epoll_fileno(pyEpoll_Object * self,PyObject * Py_UNUSED (ignored))602 select_epoll_fileno(pyEpoll_Object *self, PyObject *Py_UNUSED(ignored))
603 {
604     return select_epoll_fileno_impl(self);
605 }
606 
607 #endif /* defined(HAVE_EPOLL) */
608 
609 #if defined(HAVE_EPOLL)
610 
611 PyDoc_STRVAR(select_epoll_fromfd__doc__,
612 "fromfd($type, fd, /)\n"
613 "--\n"
614 "\n"
615 "Create an epoll object from a given control fd.");
616 
617 #define SELECT_EPOLL_FROMFD_METHODDEF    \
618     {"fromfd", (PyCFunction)select_epoll_fromfd, METH_O|METH_CLASS, select_epoll_fromfd__doc__},
619 
620 static PyObject *
621 select_epoll_fromfd_impl(PyTypeObject *type, int fd);
622 
623 static PyObject *
select_epoll_fromfd(PyTypeObject * type,PyObject * arg)624 select_epoll_fromfd(PyTypeObject *type, PyObject *arg)
625 {
626     PyObject *return_value = NULL;
627     int fd;
628 
629     fd = _PyLong_AsInt(arg);
630     if (fd == -1 && PyErr_Occurred()) {
631         goto exit;
632     }
633     return_value = select_epoll_fromfd_impl(type, fd);
634 
635 exit:
636     return return_value;
637 }
638 
639 #endif /* defined(HAVE_EPOLL) */
640 
641 #if defined(HAVE_EPOLL)
642 
643 PyDoc_STRVAR(select_epoll_register__doc__,
644 "register($self, /, fd,\n"
645 "         eventmask=select.EPOLLIN | select.EPOLLPRI | select.EPOLLOUT)\n"
646 "--\n"
647 "\n"
648 "Registers a new fd or raises an OSError if the fd is already registered.\n"
649 "\n"
650 "  fd\n"
651 "    the target file descriptor of the operation\n"
652 "  eventmask\n"
653 "    a bit set composed of the various EPOLL constants\n"
654 "\n"
655 "The epoll interface supports all file descriptors that support poll.");
656 
657 #define SELECT_EPOLL_REGISTER_METHODDEF    \
658     {"register", _PyCFunction_CAST(select_epoll_register), METH_FASTCALL|METH_KEYWORDS, select_epoll_register__doc__},
659 
660 static PyObject *
661 select_epoll_register_impl(pyEpoll_Object *self, int fd,
662                            unsigned int eventmask);
663 
664 static PyObject *
select_epoll_register(pyEpoll_Object * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)665 select_epoll_register(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
666 {
667     PyObject *return_value = NULL;
668     static const char * const _keywords[] = {"fd", "eventmask", NULL};
669     static _PyArg_Parser _parser = {NULL, _keywords, "register", 0};
670     PyObject *argsbuf[2];
671     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
672     int fd;
673     unsigned int eventmask = EPOLLIN | EPOLLPRI | EPOLLOUT;
674 
675     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
676     if (!args) {
677         goto exit;
678     }
679     if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
680         goto exit;
681     }
682     if (!noptargs) {
683         goto skip_optional_pos;
684     }
685     eventmask = (unsigned int)PyLong_AsUnsignedLongMask(args[1]);
686     if (eventmask == (unsigned int)-1 && PyErr_Occurred()) {
687         goto exit;
688     }
689 skip_optional_pos:
690     return_value = select_epoll_register_impl(self, fd, eventmask);
691 
692 exit:
693     return return_value;
694 }
695 
696 #endif /* defined(HAVE_EPOLL) */
697 
698 #if defined(HAVE_EPOLL)
699 
700 PyDoc_STRVAR(select_epoll_modify__doc__,
701 "modify($self, /, fd, eventmask)\n"
702 "--\n"
703 "\n"
704 "Modify event mask for a registered file descriptor.\n"
705 "\n"
706 "  fd\n"
707 "    the target file descriptor of the operation\n"
708 "  eventmask\n"
709 "    a bit set composed of the various EPOLL constants");
710 
711 #define SELECT_EPOLL_MODIFY_METHODDEF    \
712     {"modify", _PyCFunction_CAST(select_epoll_modify), METH_FASTCALL|METH_KEYWORDS, select_epoll_modify__doc__},
713 
714 static PyObject *
715 select_epoll_modify_impl(pyEpoll_Object *self, int fd,
716                          unsigned int eventmask);
717 
718 static PyObject *
select_epoll_modify(pyEpoll_Object * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)719 select_epoll_modify(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
720 {
721     PyObject *return_value = NULL;
722     static const char * const _keywords[] = {"fd", "eventmask", NULL};
723     static _PyArg_Parser _parser = {NULL, _keywords, "modify", 0};
724     PyObject *argsbuf[2];
725     int fd;
726     unsigned int eventmask;
727 
728     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
729     if (!args) {
730         goto exit;
731     }
732     if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
733         goto exit;
734     }
735     eventmask = (unsigned int)PyLong_AsUnsignedLongMask(args[1]);
736     if (eventmask == (unsigned int)-1 && PyErr_Occurred()) {
737         goto exit;
738     }
739     return_value = select_epoll_modify_impl(self, fd, eventmask);
740 
741 exit:
742     return return_value;
743 }
744 
745 #endif /* defined(HAVE_EPOLL) */
746 
747 #if defined(HAVE_EPOLL)
748 
749 PyDoc_STRVAR(select_epoll_unregister__doc__,
750 "unregister($self, /, fd)\n"
751 "--\n"
752 "\n"
753 "Remove a registered file descriptor from the epoll object.\n"
754 "\n"
755 "  fd\n"
756 "    the target file descriptor of the operation");
757 
758 #define SELECT_EPOLL_UNREGISTER_METHODDEF    \
759     {"unregister", _PyCFunction_CAST(select_epoll_unregister), METH_FASTCALL|METH_KEYWORDS, select_epoll_unregister__doc__},
760 
761 static PyObject *
762 select_epoll_unregister_impl(pyEpoll_Object *self, int fd);
763 
764 static PyObject *
select_epoll_unregister(pyEpoll_Object * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)765 select_epoll_unregister(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
766 {
767     PyObject *return_value = NULL;
768     static const char * const _keywords[] = {"fd", NULL};
769     static _PyArg_Parser _parser = {NULL, _keywords, "unregister", 0};
770     PyObject *argsbuf[1];
771     int fd;
772 
773     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
774     if (!args) {
775         goto exit;
776     }
777     if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
778         goto exit;
779     }
780     return_value = select_epoll_unregister_impl(self, fd);
781 
782 exit:
783     return return_value;
784 }
785 
786 #endif /* defined(HAVE_EPOLL) */
787 
788 #if defined(HAVE_EPOLL)
789 
790 PyDoc_STRVAR(select_epoll_poll__doc__,
791 "poll($self, /, timeout=None, maxevents=-1)\n"
792 "--\n"
793 "\n"
794 "Wait for events on the epoll file descriptor.\n"
795 "\n"
796 "  timeout\n"
797 "    the maximum time to wait in seconds (as float);\n"
798 "    a timeout of None or -1 makes poll wait indefinitely\n"
799 "  maxevents\n"
800 "    the maximum number of events returned; -1 means no limit\n"
801 "\n"
802 "Returns a list containing any descriptors that have events to report,\n"
803 "as a list of (fd, events) 2-tuples.");
804 
805 #define SELECT_EPOLL_POLL_METHODDEF    \
806     {"poll", _PyCFunction_CAST(select_epoll_poll), METH_FASTCALL|METH_KEYWORDS, select_epoll_poll__doc__},
807 
808 static PyObject *
809 select_epoll_poll_impl(pyEpoll_Object *self, PyObject *timeout_obj,
810                        int maxevents);
811 
812 static PyObject *
select_epoll_poll(pyEpoll_Object * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)813 select_epoll_poll(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
814 {
815     PyObject *return_value = NULL;
816     static const char * const _keywords[] = {"timeout", "maxevents", NULL};
817     static _PyArg_Parser _parser = {NULL, _keywords, "poll", 0};
818     PyObject *argsbuf[2];
819     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
820     PyObject *timeout_obj = Py_None;
821     int maxevents = -1;
822 
823     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 2, 0, argsbuf);
824     if (!args) {
825         goto exit;
826     }
827     if (!noptargs) {
828         goto skip_optional_pos;
829     }
830     if (args[0]) {
831         timeout_obj = args[0];
832         if (!--noptargs) {
833             goto skip_optional_pos;
834         }
835     }
836     maxevents = _PyLong_AsInt(args[1]);
837     if (maxevents == -1 && PyErr_Occurred()) {
838         goto exit;
839     }
840 skip_optional_pos:
841     return_value = select_epoll_poll_impl(self, timeout_obj, maxevents);
842 
843 exit:
844     return return_value;
845 }
846 
847 #endif /* defined(HAVE_EPOLL) */
848 
849 #if defined(HAVE_EPOLL)
850 
851 PyDoc_STRVAR(select_epoll___enter____doc__,
852 "__enter__($self, /)\n"
853 "--\n"
854 "\n");
855 
856 #define SELECT_EPOLL___ENTER___METHODDEF    \
857     {"__enter__", (PyCFunction)select_epoll___enter__, METH_NOARGS, select_epoll___enter____doc__},
858 
859 static PyObject *
860 select_epoll___enter___impl(pyEpoll_Object *self);
861 
862 static PyObject *
select_epoll___enter__(pyEpoll_Object * self,PyObject * Py_UNUSED (ignored))863 select_epoll___enter__(pyEpoll_Object *self, PyObject *Py_UNUSED(ignored))
864 {
865     return select_epoll___enter___impl(self);
866 }
867 
868 #endif /* defined(HAVE_EPOLL) */
869 
870 #if defined(HAVE_EPOLL)
871 
872 PyDoc_STRVAR(select_epoll___exit____doc__,
873 "__exit__($self, exc_type=None, exc_value=None, exc_tb=None, /)\n"
874 "--\n"
875 "\n");
876 
877 #define SELECT_EPOLL___EXIT___METHODDEF    \
878     {"__exit__", _PyCFunction_CAST(select_epoll___exit__), METH_FASTCALL, select_epoll___exit____doc__},
879 
880 static PyObject *
881 select_epoll___exit___impl(pyEpoll_Object *self, PyObject *exc_type,
882                            PyObject *exc_value, PyObject *exc_tb);
883 
884 static PyObject *
select_epoll___exit__(pyEpoll_Object * self,PyObject * const * args,Py_ssize_t nargs)885 select_epoll___exit__(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs)
886 {
887     PyObject *return_value = NULL;
888     PyObject *exc_type = Py_None;
889     PyObject *exc_value = Py_None;
890     PyObject *exc_tb = Py_None;
891 
892     if (!_PyArg_CheckPositional("__exit__", nargs, 0, 3)) {
893         goto exit;
894     }
895     if (nargs < 1) {
896         goto skip_optional;
897     }
898     exc_type = args[0];
899     if (nargs < 2) {
900         goto skip_optional;
901     }
902     exc_value = args[1];
903     if (nargs < 3) {
904         goto skip_optional;
905     }
906     exc_tb = args[2];
907 skip_optional:
908     return_value = select_epoll___exit___impl(self, exc_type, exc_value, exc_tb);
909 
910 exit:
911     return return_value;
912 }
913 
914 #endif /* defined(HAVE_EPOLL) */
915 
916 #if defined(HAVE_KQUEUE)
917 
918 PyDoc_STRVAR(select_kqueue__doc__,
919 "kqueue()\n"
920 "--\n"
921 "\n"
922 "Kqueue syscall wrapper.\n"
923 "\n"
924 "For example, to start watching a socket for input:\n"
925 ">>> kq = kqueue()\n"
926 ">>> sock = socket()\n"
927 ">>> sock.connect((host, port))\n"
928 ">>> kq.control([kevent(sock, KQ_FILTER_WRITE, KQ_EV_ADD)], 0)\n"
929 "\n"
930 "To wait one second for it to become writeable:\n"
931 ">>> kq.control(None, 1, 1000)\n"
932 "\n"
933 "To stop listening:\n"
934 ">>> kq.control([kevent(sock, KQ_FILTER_WRITE, KQ_EV_DELETE)], 0)");
935 
936 static PyObject *
937 select_kqueue_impl(PyTypeObject *type);
938 
939 static PyObject *
select_kqueue(PyTypeObject * type,PyObject * args,PyObject * kwargs)940 select_kqueue(PyTypeObject *type, PyObject *args, PyObject *kwargs)
941 {
942     PyObject *return_value = NULL;
943 
944     if ((type == _selectstate_by_type(type)->kqueue_queue_Type ||
945          type->tp_init == _selectstate_by_type(type)->kqueue_queue_Type->tp_init) &&
946         !_PyArg_NoPositional("kqueue", args)) {
947         goto exit;
948     }
949     if ((type == _selectstate_by_type(type)->kqueue_queue_Type ||
950          type->tp_init == _selectstate_by_type(type)->kqueue_queue_Type->tp_init) &&
951         !_PyArg_NoKeywords("kqueue", kwargs)) {
952         goto exit;
953     }
954     return_value = select_kqueue_impl(type);
955 
956 exit:
957     return return_value;
958 }
959 
960 #endif /* defined(HAVE_KQUEUE) */
961 
962 #if defined(HAVE_KQUEUE)
963 
964 PyDoc_STRVAR(select_kqueue_close__doc__,
965 "close($self, /)\n"
966 "--\n"
967 "\n"
968 "Close the kqueue control file descriptor.\n"
969 "\n"
970 "Further operations on the kqueue object will raise an exception.");
971 
972 #define SELECT_KQUEUE_CLOSE_METHODDEF    \
973     {"close", (PyCFunction)select_kqueue_close, METH_NOARGS, select_kqueue_close__doc__},
974 
975 static PyObject *
976 select_kqueue_close_impl(kqueue_queue_Object *self);
977 
978 static PyObject *
select_kqueue_close(kqueue_queue_Object * self,PyObject * Py_UNUSED (ignored))979 select_kqueue_close(kqueue_queue_Object *self, PyObject *Py_UNUSED(ignored))
980 {
981     return select_kqueue_close_impl(self);
982 }
983 
984 #endif /* defined(HAVE_KQUEUE) */
985 
986 #if defined(HAVE_KQUEUE)
987 
988 PyDoc_STRVAR(select_kqueue_fileno__doc__,
989 "fileno($self, /)\n"
990 "--\n"
991 "\n"
992 "Return the kqueue control file descriptor.");
993 
994 #define SELECT_KQUEUE_FILENO_METHODDEF    \
995     {"fileno", (PyCFunction)select_kqueue_fileno, METH_NOARGS, select_kqueue_fileno__doc__},
996 
997 static PyObject *
998 select_kqueue_fileno_impl(kqueue_queue_Object *self);
999 
1000 static PyObject *
select_kqueue_fileno(kqueue_queue_Object * self,PyObject * Py_UNUSED (ignored))1001 select_kqueue_fileno(kqueue_queue_Object *self, PyObject *Py_UNUSED(ignored))
1002 {
1003     return select_kqueue_fileno_impl(self);
1004 }
1005 
1006 #endif /* defined(HAVE_KQUEUE) */
1007 
1008 #if defined(HAVE_KQUEUE)
1009 
1010 PyDoc_STRVAR(select_kqueue_fromfd__doc__,
1011 "fromfd($type, fd, /)\n"
1012 "--\n"
1013 "\n"
1014 "Create a kqueue object from a given control fd.");
1015 
1016 #define SELECT_KQUEUE_FROMFD_METHODDEF    \
1017     {"fromfd", (PyCFunction)select_kqueue_fromfd, METH_O|METH_CLASS, select_kqueue_fromfd__doc__},
1018 
1019 static PyObject *
1020 select_kqueue_fromfd_impl(PyTypeObject *type, int fd);
1021 
1022 static PyObject *
select_kqueue_fromfd(PyTypeObject * type,PyObject * arg)1023 select_kqueue_fromfd(PyTypeObject *type, PyObject *arg)
1024 {
1025     PyObject *return_value = NULL;
1026     int fd;
1027 
1028     fd = _PyLong_AsInt(arg);
1029     if (fd == -1 && PyErr_Occurred()) {
1030         goto exit;
1031     }
1032     return_value = select_kqueue_fromfd_impl(type, fd);
1033 
1034 exit:
1035     return return_value;
1036 }
1037 
1038 #endif /* defined(HAVE_KQUEUE) */
1039 
1040 #if defined(HAVE_KQUEUE)
1041 
1042 PyDoc_STRVAR(select_kqueue_control__doc__,
1043 "control($self, changelist, maxevents, timeout=None, /)\n"
1044 "--\n"
1045 "\n"
1046 "Calls the kernel kevent function.\n"
1047 "\n"
1048 "  changelist\n"
1049 "    Must be an iterable of kevent objects describing the changes to be made\n"
1050 "    to the kernel\'s watch list or None.\n"
1051 "  maxevents\n"
1052 "    The maximum number of events that the kernel will return.\n"
1053 "  timeout\n"
1054 "    The maximum time to wait in seconds, or else None to wait forever.\n"
1055 "    This accepts floats for smaller timeouts, too.");
1056 
1057 #define SELECT_KQUEUE_CONTROL_METHODDEF    \
1058     {"control", _PyCFunction_CAST(select_kqueue_control), METH_FASTCALL, select_kqueue_control__doc__},
1059 
1060 static PyObject *
1061 select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
1062                            int maxevents, PyObject *otimeout);
1063 
1064 static PyObject *
select_kqueue_control(kqueue_queue_Object * self,PyObject * const * args,Py_ssize_t nargs)1065 select_kqueue_control(kqueue_queue_Object *self, PyObject *const *args, Py_ssize_t nargs)
1066 {
1067     PyObject *return_value = NULL;
1068     PyObject *changelist;
1069     int maxevents;
1070     PyObject *otimeout = Py_None;
1071 
1072     if (!_PyArg_CheckPositional("control", nargs, 2, 3)) {
1073         goto exit;
1074     }
1075     changelist = args[0];
1076     maxevents = _PyLong_AsInt(args[1]);
1077     if (maxevents == -1 && PyErr_Occurred()) {
1078         goto exit;
1079     }
1080     if (nargs < 3) {
1081         goto skip_optional;
1082     }
1083     otimeout = args[2];
1084 skip_optional:
1085     return_value = select_kqueue_control_impl(self, changelist, maxevents, otimeout);
1086 
1087 exit:
1088     return return_value;
1089 }
1090 
1091 #endif /* defined(HAVE_KQUEUE) */
1092 
1093 #ifndef SELECT_POLL_REGISTER_METHODDEF
1094     #define SELECT_POLL_REGISTER_METHODDEF
1095 #endif /* !defined(SELECT_POLL_REGISTER_METHODDEF) */
1096 
1097 #ifndef SELECT_POLL_MODIFY_METHODDEF
1098     #define SELECT_POLL_MODIFY_METHODDEF
1099 #endif /* !defined(SELECT_POLL_MODIFY_METHODDEF) */
1100 
1101 #ifndef SELECT_POLL_UNREGISTER_METHODDEF
1102     #define SELECT_POLL_UNREGISTER_METHODDEF
1103 #endif /* !defined(SELECT_POLL_UNREGISTER_METHODDEF) */
1104 
1105 #ifndef SELECT_POLL_POLL_METHODDEF
1106     #define SELECT_POLL_POLL_METHODDEF
1107 #endif /* !defined(SELECT_POLL_POLL_METHODDEF) */
1108 
1109 #ifndef SELECT_DEVPOLL_REGISTER_METHODDEF
1110     #define SELECT_DEVPOLL_REGISTER_METHODDEF
1111 #endif /* !defined(SELECT_DEVPOLL_REGISTER_METHODDEF) */
1112 
1113 #ifndef SELECT_DEVPOLL_MODIFY_METHODDEF
1114     #define SELECT_DEVPOLL_MODIFY_METHODDEF
1115 #endif /* !defined(SELECT_DEVPOLL_MODIFY_METHODDEF) */
1116 
1117 #ifndef SELECT_DEVPOLL_UNREGISTER_METHODDEF
1118     #define SELECT_DEVPOLL_UNREGISTER_METHODDEF
1119 #endif /* !defined(SELECT_DEVPOLL_UNREGISTER_METHODDEF) */
1120 
1121 #ifndef SELECT_DEVPOLL_POLL_METHODDEF
1122     #define SELECT_DEVPOLL_POLL_METHODDEF
1123 #endif /* !defined(SELECT_DEVPOLL_POLL_METHODDEF) */
1124 
1125 #ifndef SELECT_DEVPOLL_CLOSE_METHODDEF
1126     #define SELECT_DEVPOLL_CLOSE_METHODDEF
1127 #endif /* !defined(SELECT_DEVPOLL_CLOSE_METHODDEF) */
1128 
1129 #ifndef SELECT_DEVPOLL_FILENO_METHODDEF
1130     #define SELECT_DEVPOLL_FILENO_METHODDEF
1131 #endif /* !defined(SELECT_DEVPOLL_FILENO_METHODDEF) */
1132 
1133 #ifndef SELECT_POLL_METHODDEF
1134     #define SELECT_POLL_METHODDEF
1135 #endif /* !defined(SELECT_POLL_METHODDEF) */
1136 
1137 #ifndef SELECT_DEVPOLL_METHODDEF
1138     #define SELECT_DEVPOLL_METHODDEF
1139 #endif /* !defined(SELECT_DEVPOLL_METHODDEF) */
1140 
1141 #ifndef SELECT_EPOLL_CLOSE_METHODDEF
1142     #define SELECT_EPOLL_CLOSE_METHODDEF
1143 #endif /* !defined(SELECT_EPOLL_CLOSE_METHODDEF) */
1144 
1145 #ifndef SELECT_EPOLL_FILENO_METHODDEF
1146     #define SELECT_EPOLL_FILENO_METHODDEF
1147 #endif /* !defined(SELECT_EPOLL_FILENO_METHODDEF) */
1148 
1149 #ifndef SELECT_EPOLL_FROMFD_METHODDEF
1150     #define SELECT_EPOLL_FROMFD_METHODDEF
1151 #endif /* !defined(SELECT_EPOLL_FROMFD_METHODDEF) */
1152 
1153 #ifndef SELECT_EPOLL_REGISTER_METHODDEF
1154     #define SELECT_EPOLL_REGISTER_METHODDEF
1155 #endif /* !defined(SELECT_EPOLL_REGISTER_METHODDEF) */
1156 
1157 #ifndef SELECT_EPOLL_MODIFY_METHODDEF
1158     #define SELECT_EPOLL_MODIFY_METHODDEF
1159 #endif /* !defined(SELECT_EPOLL_MODIFY_METHODDEF) */
1160 
1161 #ifndef SELECT_EPOLL_UNREGISTER_METHODDEF
1162     #define SELECT_EPOLL_UNREGISTER_METHODDEF
1163 #endif /* !defined(SELECT_EPOLL_UNREGISTER_METHODDEF) */
1164 
1165 #ifndef SELECT_EPOLL_POLL_METHODDEF
1166     #define SELECT_EPOLL_POLL_METHODDEF
1167 #endif /* !defined(SELECT_EPOLL_POLL_METHODDEF) */
1168 
1169 #ifndef SELECT_EPOLL___ENTER___METHODDEF
1170     #define SELECT_EPOLL___ENTER___METHODDEF
1171 #endif /* !defined(SELECT_EPOLL___ENTER___METHODDEF) */
1172 
1173 #ifndef SELECT_EPOLL___EXIT___METHODDEF
1174     #define SELECT_EPOLL___EXIT___METHODDEF
1175 #endif /* !defined(SELECT_EPOLL___EXIT___METHODDEF) */
1176 
1177 #ifndef SELECT_KQUEUE_CLOSE_METHODDEF
1178     #define SELECT_KQUEUE_CLOSE_METHODDEF
1179 #endif /* !defined(SELECT_KQUEUE_CLOSE_METHODDEF) */
1180 
1181 #ifndef SELECT_KQUEUE_FILENO_METHODDEF
1182     #define SELECT_KQUEUE_FILENO_METHODDEF
1183 #endif /* !defined(SELECT_KQUEUE_FILENO_METHODDEF) */
1184 
1185 #ifndef SELECT_KQUEUE_FROMFD_METHODDEF
1186     #define SELECT_KQUEUE_FROMFD_METHODDEF
1187 #endif /* !defined(SELECT_KQUEUE_FROMFD_METHODDEF) */
1188 
1189 #ifndef SELECT_KQUEUE_CONTROL_METHODDEF
1190     #define SELECT_KQUEUE_CONTROL_METHODDEF
1191 #endif /* !defined(SELECT_KQUEUE_CONTROL_METHODDEF) */
1192 /*[clinic end generated code: output=e77cc5c8a6c77860 input=a9049054013a1b77]*/
1193