17db96d56Sopenharmony_ci/*[clinic input] 27db96d56Sopenharmony_cipreserve 37db96d56Sopenharmony_ci[clinic start generated code]*/ 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ciPyDoc_STRVAR(select_select__doc__, 67db96d56Sopenharmony_ci"select($module, rlist, wlist, xlist, timeout=None, /)\n" 77db96d56Sopenharmony_ci"--\n" 87db96d56Sopenharmony_ci"\n" 97db96d56Sopenharmony_ci"Wait until one or more file descriptors are ready for some kind of I/O.\n" 107db96d56Sopenharmony_ci"\n" 117db96d56Sopenharmony_ci"The first three arguments are iterables of file descriptors to be waited for:\n" 127db96d56Sopenharmony_ci"rlist -- wait until ready for reading\n" 137db96d56Sopenharmony_ci"wlist -- wait until ready for writing\n" 147db96d56Sopenharmony_ci"xlist -- wait for an \"exceptional condition\"\n" 157db96d56Sopenharmony_ci"If only one kind of condition is required, pass [] for the other lists.\n" 167db96d56Sopenharmony_ci"\n" 177db96d56Sopenharmony_ci"A file descriptor is either a socket or file object, or a small integer\n" 187db96d56Sopenharmony_ci"gotten from a fileno() method call on one of those.\n" 197db96d56Sopenharmony_ci"\n" 207db96d56Sopenharmony_ci"The optional 4th argument specifies a timeout in seconds; it may be\n" 217db96d56Sopenharmony_ci"a floating point number to specify fractions of seconds. If it is absent\n" 227db96d56Sopenharmony_ci"or None, the call will never time out.\n" 237db96d56Sopenharmony_ci"\n" 247db96d56Sopenharmony_ci"The return value is a tuple of three lists corresponding to the first three\n" 257db96d56Sopenharmony_ci"arguments; each contains the subset of the corresponding file descriptors\n" 267db96d56Sopenharmony_ci"that are ready.\n" 277db96d56Sopenharmony_ci"\n" 287db96d56Sopenharmony_ci"*** IMPORTANT NOTICE ***\n" 297db96d56Sopenharmony_ci"On Windows, only sockets are supported; on Unix, all file\n" 307db96d56Sopenharmony_ci"descriptors can be used."); 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci#define SELECT_SELECT_METHODDEF \ 337db96d56Sopenharmony_ci {"select", _PyCFunction_CAST(select_select), METH_FASTCALL, select_select__doc__}, 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_cistatic PyObject * 367db96d56Sopenharmony_ciselect_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist, 377db96d56Sopenharmony_ci PyObject *xlist, PyObject *timeout_obj); 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_cistatic PyObject * 407db96d56Sopenharmony_ciselect_select(PyObject *module, PyObject *const *args, Py_ssize_t nargs) 417db96d56Sopenharmony_ci{ 427db96d56Sopenharmony_ci PyObject *return_value = NULL; 437db96d56Sopenharmony_ci PyObject *rlist; 447db96d56Sopenharmony_ci PyObject *wlist; 457db96d56Sopenharmony_ci PyObject *xlist; 467db96d56Sopenharmony_ci PyObject *timeout_obj = Py_None; 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("select", nargs, 3, 4)) { 497db96d56Sopenharmony_ci goto exit; 507db96d56Sopenharmony_ci } 517db96d56Sopenharmony_ci rlist = args[0]; 527db96d56Sopenharmony_ci wlist = args[1]; 537db96d56Sopenharmony_ci xlist = args[2]; 547db96d56Sopenharmony_ci if (nargs < 4) { 557db96d56Sopenharmony_ci goto skip_optional; 567db96d56Sopenharmony_ci } 577db96d56Sopenharmony_ci timeout_obj = args[3]; 587db96d56Sopenharmony_ciskip_optional: 597db96d56Sopenharmony_ci return_value = select_select_impl(module, rlist, wlist, xlist, timeout_obj); 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ciexit: 627db96d56Sopenharmony_ci return return_value; 637db96d56Sopenharmony_ci} 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ciPyDoc_STRVAR(select_poll_register__doc__, 687db96d56Sopenharmony_ci"register($self, fd,\n" 697db96d56Sopenharmony_ci" eventmask=select.POLLIN | select.POLLPRI | select.POLLOUT, /)\n" 707db96d56Sopenharmony_ci"--\n" 717db96d56Sopenharmony_ci"\n" 727db96d56Sopenharmony_ci"Register a file descriptor with the polling object.\n" 737db96d56Sopenharmony_ci"\n" 747db96d56Sopenharmony_ci" fd\n" 757db96d56Sopenharmony_ci" either an integer, or an object with a fileno() method returning an int\n" 767db96d56Sopenharmony_ci" eventmask\n" 777db96d56Sopenharmony_ci" an optional bitmask describing the type of events to check for"); 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci#define SELECT_POLL_REGISTER_METHODDEF \ 807db96d56Sopenharmony_ci {"register", _PyCFunction_CAST(select_poll_register), METH_FASTCALL, select_poll_register__doc__}, 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_cistatic PyObject * 837db96d56Sopenharmony_ciselect_poll_register_impl(pollObject *self, int fd, unsigned short eventmask); 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_cistatic PyObject * 867db96d56Sopenharmony_ciselect_poll_register(pollObject *self, PyObject *const *args, Py_ssize_t nargs) 877db96d56Sopenharmony_ci{ 887db96d56Sopenharmony_ci PyObject *return_value = NULL; 897db96d56Sopenharmony_ci int fd; 907db96d56Sopenharmony_ci unsigned short eventmask = POLLIN | POLLPRI | POLLOUT; 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("register", nargs, 1, 2)) { 937db96d56Sopenharmony_ci goto exit; 947db96d56Sopenharmony_ci } 957db96d56Sopenharmony_ci if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { 967db96d56Sopenharmony_ci goto exit; 977db96d56Sopenharmony_ci } 987db96d56Sopenharmony_ci if (nargs < 2) { 997db96d56Sopenharmony_ci goto skip_optional; 1007db96d56Sopenharmony_ci } 1017db96d56Sopenharmony_ci if (!_PyLong_UnsignedShort_Converter(args[1], &eventmask)) { 1027db96d56Sopenharmony_ci goto exit; 1037db96d56Sopenharmony_ci } 1047db96d56Sopenharmony_ciskip_optional: 1057db96d56Sopenharmony_ci return_value = select_poll_register_impl(self, fd, eventmask); 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ciexit: 1087db96d56Sopenharmony_ci return return_value; 1097db96d56Sopenharmony_ci} 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */ 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ciPyDoc_STRVAR(select_poll_modify__doc__, 1167db96d56Sopenharmony_ci"modify($self, fd, eventmask, /)\n" 1177db96d56Sopenharmony_ci"--\n" 1187db96d56Sopenharmony_ci"\n" 1197db96d56Sopenharmony_ci"Modify an already registered file descriptor.\n" 1207db96d56Sopenharmony_ci"\n" 1217db96d56Sopenharmony_ci" fd\n" 1227db96d56Sopenharmony_ci" either an integer, or an object with a fileno() method returning\n" 1237db96d56Sopenharmony_ci" an int\n" 1247db96d56Sopenharmony_ci" eventmask\n" 1257db96d56Sopenharmony_ci" a bitmask describing the type of events to check for"); 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci#define SELECT_POLL_MODIFY_METHODDEF \ 1287db96d56Sopenharmony_ci {"modify", _PyCFunction_CAST(select_poll_modify), METH_FASTCALL, select_poll_modify__doc__}, 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_cistatic PyObject * 1317db96d56Sopenharmony_ciselect_poll_modify_impl(pollObject *self, int fd, unsigned short eventmask); 1327db96d56Sopenharmony_ci 1337db96d56Sopenharmony_cistatic PyObject * 1347db96d56Sopenharmony_ciselect_poll_modify(pollObject *self, PyObject *const *args, Py_ssize_t nargs) 1357db96d56Sopenharmony_ci{ 1367db96d56Sopenharmony_ci PyObject *return_value = NULL; 1377db96d56Sopenharmony_ci int fd; 1387db96d56Sopenharmony_ci unsigned short eventmask; 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("modify", nargs, 2, 2)) { 1417db96d56Sopenharmony_ci goto exit; 1427db96d56Sopenharmony_ci } 1437db96d56Sopenharmony_ci if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { 1447db96d56Sopenharmony_ci goto exit; 1457db96d56Sopenharmony_ci } 1467db96d56Sopenharmony_ci if (!_PyLong_UnsignedShort_Converter(args[1], &eventmask)) { 1477db96d56Sopenharmony_ci goto exit; 1487db96d56Sopenharmony_ci } 1497db96d56Sopenharmony_ci return_value = select_poll_modify_impl(self, fd, eventmask); 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ciexit: 1527db96d56Sopenharmony_ci return return_value; 1537db96d56Sopenharmony_ci} 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */ 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) 1587db96d56Sopenharmony_ci 1597db96d56Sopenharmony_ciPyDoc_STRVAR(select_poll_unregister__doc__, 1607db96d56Sopenharmony_ci"unregister($self, fd, /)\n" 1617db96d56Sopenharmony_ci"--\n" 1627db96d56Sopenharmony_ci"\n" 1637db96d56Sopenharmony_ci"Remove a file descriptor being tracked by the polling object."); 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_ci#define SELECT_POLL_UNREGISTER_METHODDEF \ 1667db96d56Sopenharmony_ci {"unregister", (PyCFunction)select_poll_unregister, METH_O, select_poll_unregister__doc__}, 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_cistatic PyObject * 1697db96d56Sopenharmony_ciselect_poll_unregister_impl(pollObject *self, int fd); 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_cistatic PyObject * 1727db96d56Sopenharmony_ciselect_poll_unregister(pollObject *self, PyObject *arg) 1737db96d56Sopenharmony_ci{ 1747db96d56Sopenharmony_ci PyObject *return_value = NULL; 1757db96d56Sopenharmony_ci int fd; 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci if (!_PyLong_FileDescriptor_Converter(arg, &fd)) { 1787db96d56Sopenharmony_ci goto exit; 1797db96d56Sopenharmony_ci } 1807db96d56Sopenharmony_ci return_value = select_poll_unregister_impl(self, fd); 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ciexit: 1837db96d56Sopenharmony_ci return return_value; 1847db96d56Sopenharmony_ci} 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */ 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ciPyDoc_STRVAR(select_poll_poll__doc__, 1917db96d56Sopenharmony_ci"poll($self, timeout=None, /)\n" 1927db96d56Sopenharmony_ci"--\n" 1937db96d56Sopenharmony_ci"\n" 1947db96d56Sopenharmony_ci"Polls the set of registered file descriptors.\n" 1957db96d56Sopenharmony_ci"\n" 1967db96d56Sopenharmony_ci" timeout\n" 1977db96d56Sopenharmony_ci" The maximum time to wait in milliseconds, or else None (or a negative\n" 1987db96d56Sopenharmony_ci" value) to wait indefinitely.\n" 1997db96d56Sopenharmony_ci"\n" 2007db96d56Sopenharmony_ci"Returns a list containing any descriptors that have events or errors to\n" 2017db96d56Sopenharmony_ci"report, as a list of (fd, event) 2-tuples."); 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ci#define SELECT_POLL_POLL_METHODDEF \ 2047db96d56Sopenharmony_ci {"poll", _PyCFunction_CAST(select_poll_poll), METH_FASTCALL, select_poll_poll__doc__}, 2057db96d56Sopenharmony_ci 2067db96d56Sopenharmony_cistatic PyObject * 2077db96d56Sopenharmony_ciselect_poll_poll_impl(pollObject *self, PyObject *timeout_obj); 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_cistatic PyObject * 2107db96d56Sopenharmony_ciselect_poll_poll(pollObject *self, PyObject *const *args, Py_ssize_t nargs) 2117db96d56Sopenharmony_ci{ 2127db96d56Sopenharmony_ci PyObject *return_value = NULL; 2137db96d56Sopenharmony_ci PyObject *timeout_obj = Py_None; 2147db96d56Sopenharmony_ci 2157db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("poll", nargs, 0, 1)) { 2167db96d56Sopenharmony_ci goto exit; 2177db96d56Sopenharmony_ci } 2187db96d56Sopenharmony_ci if (nargs < 1) { 2197db96d56Sopenharmony_ci goto skip_optional; 2207db96d56Sopenharmony_ci } 2217db96d56Sopenharmony_ci timeout_obj = args[0]; 2227db96d56Sopenharmony_ciskip_optional: 2237db96d56Sopenharmony_ci return_value = select_poll_poll_impl(self, timeout_obj); 2247db96d56Sopenharmony_ci 2257db96d56Sopenharmony_ciexit: 2267db96d56Sopenharmony_ci return return_value; 2277db96d56Sopenharmony_ci} 2287db96d56Sopenharmony_ci 2297db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */ 2307db96d56Sopenharmony_ci 2317db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ciPyDoc_STRVAR(select_devpoll_register__doc__, 2347db96d56Sopenharmony_ci"register($self, fd,\n" 2357db96d56Sopenharmony_ci" eventmask=select.POLLIN | select.POLLPRI | select.POLLOUT, /)\n" 2367db96d56Sopenharmony_ci"--\n" 2377db96d56Sopenharmony_ci"\n" 2387db96d56Sopenharmony_ci"Register a file descriptor with the polling object.\n" 2397db96d56Sopenharmony_ci"\n" 2407db96d56Sopenharmony_ci" fd\n" 2417db96d56Sopenharmony_ci" either an integer, or an object with a fileno() method returning\n" 2427db96d56Sopenharmony_ci" an int\n" 2437db96d56Sopenharmony_ci" eventmask\n" 2447db96d56Sopenharmony_ci" an optional bitmask describing the type of events to check for"); 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci#define SELECT_DEVPOLL_REGISTER_METHODDEF \ 2477db96d56Sopenharmony_ci {"register", _PyCFunction_CAST(select_devpoll_register), METH_FASTCALL, select_devpoll_register__doc__}, 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_cistatic PyObject * 2507db96d56Sopenharmony_ciselect_devpoll_register_impl(devpollObject *self, int fd, 2517db96d56Sopenharmony_ci unsigned short eventmask); 2527db96d56Sopenharmony_ci 2537db96d56Sopenharmony_cistatic PyObject * 2547db96d56Sopenharmony_ciselect_devpoll_register(devpollObject *self, PyObject *const *args, Py_ssize_t nargs) 2557db96d56Sopenharmony_ci{ 2567db96d56Sopenharmony_ci PyObject *return_value = NULL; 2577db96d56Sopenharmony_ci int fd; 2587db96d56Sopenharmony_ci unsigned short eventmask = POLLIN | POLLPRI | POLLOUT; 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("register", nargs, 1, 2)) { 2617db96d56Sopenharmony_ci goto exit; 2627db96d56Sopenharmony_ci } 2637db96d56Sopenharmony_ci if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { 2647db96d56Sopenharmony_ci goto exit; 2657db96d56Sopenharmony_ci } 2667db96d56Sopenharmony_ci if (nargs < 2) { 2677db96d56Sopenharmony_ci goto skip_optional; 2687db96d56Sopenharmony_ci } 2697db96d56Sopenharmony_ci if (!_PyLong_UnsignedShort_Converter(args[1], &eventmask)) { 2707db96d56Sopenharmony_ci goto exit; 2717db96d56Sopenharmony_ci } 2727db96d56Sopenharmony_ciskip_optional: 2737db96d56Sopenharmony_ci return_value = select_devpoll_register_impl(self, fd, eventmask); 2747db96d56Sopenharmony_ci 2757db96d56Sopenharmony_ciexit: 2767db96d56Sopenharmony_ci return return_value; 2777db96d56Sopenharmony_ci} 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */ 2807db96d56Sopenharmony_ci 2817db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) 2827db96d56Sopenharmony_ci 2837db96d56Sopenharmony_ciPyDoc_STRVAR(select_devpoll_modify__doc__, 2847db96d56Sopenharmony_ci"modify($self, fd,\n" 2857db96d56Sopenharmony_ci" eventmask=select.POLLIN | select.POLLPRI | select.POLLOUT, /)\n" 2867db96d56Sopenharmony_ci"--\n" 2877db96d56Sopenharmony_ci"\n" 2887db96d56Sopenharmony_ci"Modify a possible already registered file descriptor.\n" 2897db96d56Sopenharmony_ci"\n" 2907db96d56Sopenharmony_ci" fd\n" 2917db96d56Sopenharmony_ci" either an integer, or an object with a fileno() method returning\n" 2927db96d56Sopenharmony_ci" an int\n" 2937db96d56Sopenharmony_ci" eventmask\n" 2947db96d56Sopenharmony_ci" an optional bitmask describing the type of events to check for"); 2957db96d56Sopenharmony_ci 2967db96d56Sopenharmony_ci#define SELECT_DEVPOLL_MODIFY_METHODDEF \ 2977db96d56Sopenharmony_ci {"modify", _PyCFunction_CAST(select_devpoll_modify), METH_FASTCALL, select_devpoll_modify__doc__}, 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_cistatic PyObject * 3007db96d56Sopenharmony_ciselect_devpoll_modify_impl(devpollObject *self, int fd, 3017db96d56Sopenharmony_ci unsigned short eventmask); 3027db96d56Sopenharmony_ci 3037db96d56Sopenharmony_cistatic PyObject * 3047db96d56Sopenharmony_ciselect_devpoll_modify(devpollObject *self, PyObject *const *args, Py_ssize_t nargs) 3057db96d56Sopenharmony_ci{ 3067db96d56Sopenharmony_ci PyObject *return_value = NULL; 3077db96d56Sopenharmony_ci int fd; 3087db96d56Sopenharmony_ci unsigned short eventmask = POLLIN | POLLPRI | POLLOUT; 3097db96d56Sopenharmony_ci 3107db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("modify", nargs, 1, 2)) { 3117db96d56Sopenharmony_ci goto exit; 3127db96d56Sopenharmony_ci } 3137db96d56Sopenharmony_ci if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { 3147db96d56Sopenharmony_ci goto exit; 3157db96d56Sopenharmony_ci } 3167db96d56Sopenharmony_ci if (nargs < 2) { 3177db96d56Sopenharmony_ci goto skip_optional; 3187db96d56Sopenharmony_ci } 3197db96d56Sopenharmony_ci if (!_PyLong_UnsignedShort_Converter(args[1], &eventmask)) { 3207db96d56Sopenharmony_ci goto exit; 3217db96d56Sopenharmony_ci } 3227db96d56Sopenharmony_ciskip_optional: 3237db96d56Sopenharmony_ci return_value = select_devpoll_modify_impl(self, fd, eventmask); 3247db96d56Sopenharmony_ci 3257db96d56Sopenharmony_ciexit: 3267db96d56Sopenharmony_ci return return_value; 3277db96d56Sopenharmony_ci} 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */ 3307db96d56Sopenharmony_ci 3317db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) 3327db96d56Sopenharmony_ci 3337db96d56Sopenharmony_ciPyDoc_STRVAR(select_devpoll_unregister__doc__, 3347db96d56Sopenharmony_ci"unregister($self, fd, /)\n" 3357db96d56Sopenharmony_ci"--\n" 3367db96d56Sopenharmony_ci"\n" 3377db96d56Sopenharmony_ci"Remove a file descriptor being tracked by the polling object."); 3387db96d56Sopenharmony_ci 3397db96d56Sopenharmony_ci#define SELECT_DEVPOLL_UNREGISTER_METHODDEF \ 3407db96d56Sopenharmony_ci {"unregister", (PyCFunction)select_devpoll_unregister, METH_O, select_devpoll_unregister__doc__}, 3417db96d56Sopenharmony_ci 3427db96d56Sopenharmony_cistatic PyObject * 3437db96d56Sopenharmony_ciselect_devpoll_unregister_impl(devpollObject *self, int fd); 3447db96d56Sopenharmony_ci 3457db96d56Sopenharmony_cistatic PyObject * 3467db96d56Sopenharmony_ciselect_devpoll_unregister(devpollObject *self, PyObject *arg) 3477db96d56Sopenharmony_ci{ 3487db96d56Sopenharmony_ci PyObject *return_value = NULL; 3497db96d56Sopenharmony_ci int fd; 3507db96d56Sopenharmony_ci 3517db96d56Sopenharmony_ci if (!_PyLong_FileDescriptor_Converter(arg, &fd)) { 3527db96d56Sopenharmony_ci goto exit; 3537db96d56Sopenharmony_ci } 3547db96d56Sopenharmony_ci return_value = select_devpoll_unregister_impl(self, fd); 3557db96d56Sopenharmony_ci 3567db96d56Sopenharmony_ciexit: 3577db96d56Sopenharmony_ci return return_value; 3587db96d56Sopenharmony_ci} 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */ 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) 3637db96d56Sopenharmony_ci 3647db96d56Sopenharmony_ciPyDoc_STRVAR(select_devpoll_poll__doc__, 3657db96d56Sopenharmony_ci"poll($self, timeout=None, /)\n" 3667db96d56Sopenharmony_ci"--\n" 3677db96d56Sopenharmony_ci"\n" 3687db96d56Sopenharmony_ci"Polls the set of registered file descriptors.\n" 3697db96d56Sopenharmony_ci"\n" 3707db96d56Sopenharmony_ci" timeout\n" 3717db96d56Sopenharmony_ci" The maximum time to wait in milliseconds, or else None (or a negative\n" 3727db96d56Sopenharmony_ci" value) to wait indefinitely.\n" 3737db96d56Sopenharmony_ci"\n" 3747db96d56Sopenharmony_ci"Returns a list containing any descriptors that have events or errors to\n" 3757db96d56Sopenharmony_ci"report, as a list of (fd, event) 2-tuples."); 3767db96d56Sopenharmony_ci 3777db96d56Sopenharmony_ci#define SELECT_DEVPOLL_POLL_METHODDEF \ 3787db96d56Sopenharmony_ci {"poll", _PyCFunction_CAST(select_devpoll_poll), METH_FASTCALL, select_devpoll_poll__doc__}, 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_cistatic PyObject * 3817db96d56Sopenharmony_ciselect_devpoll_poll_impl(devpollObject *self, PyObject *timeout_obj); 3827db96d56Sopenharmony_ci 3837db96d56Sopenharmony_cistatic PyObject * 3847db96d56Sopenharmony_ciselect_devpoll_poll(devpollObject *self, PyObject *const *args, Py_ssize_t nargs) 3857db96d56Sopenharmony_ci{ 3867db96d56Sopenharmony_ci PyObject *return_value = NULL; 3877db96d56Sopenharmony_ci PyObject *timeout_obj = Py_None; 3887db96d56Sopenharmony_ci 3897db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("poll", nargs, 0, 1)) { 3907db96d56Sopenharmony_ci goto exit; 3917db96d56Sopenharmony_ci } 3927db96d56Sopenharmony_ci if (nargs < 1) { 3937db96d56Sopenharmony_ci goto skip_optional; 3947db96d56Sopenharmony_ci } 3957db96d56Sopenharmony_ci timeout_obj = args[0]; 3967db96d56Sopenharmony_ciskip_optional: 3977db96d56Sopenharmony_ci return_value = select_devpoll_poll_impl(self, timeout_obj); 3987db96d56Sopenharmony_ci 3997db96d56Sopenharmony_ciexit: 4007db96d56Sopenharmony_ci return return_value; 4017db96d56Sopenharmony_ci} 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */ 4047db96d56Sopenharmony_ci 4057db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) 4067db96d56Sopenharmony_ci 4077db96d56Sopenharmony_ciPyDoc_STRVAR(select_devpoll_close__doc__, 4087db96d56Sopenharmony_ci"close($self, /)\n" 4097db96d56Sopenharmony_ci"--\n" 4107db96d56Sopenharmony_ci"\n" 4117db96d56Sopenharmony_ci"Close the devpoll file descriptor.\n" 4127db96d56Sopenharmony_ci"\n" 4137db96d56Sopenharmony_ci"Further operations on the devpoll object will raise an exception."); 4147db96d56Sopenharmony_ci 4157db96d56Sopenharmony_ci#define SELECT_DEVPOLL_CLOSE_METHODDEF \ 4167db96d56Sopenharmony_ci {"close", (PyCFunction)select_devpoll_close, METH_NOARGS, select_devpoll_close__doc__}, 4177db96d56Sopenharmony_ci 4187db96d56Sopenharmony_cistatic PyObject * 4197db96d56Sopenharmony_ciselect_devpoll_close_impl(devpollObject *self); 4207db96d56Sopenharmony_ci 4217db96d56Sopenharmony_cistatic PyObject * 4227db96d56Sopenharmony_ciselect_devpoll_close(devpollObject *self, PyObject *Py_UNUSED(ignored)) 4237db96d56Sopenharmony_ci{ 4247db96d56Sopenharmony_ci return select_devpoll_close_impl(self); 4257db96d56Sopenharmony_ci} 4267db96d56Sopenharmony_ci 4277db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */ 4287db96d56Sopenharmony_ci 4297db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) 4307db96d56Sopenharmony_ci 4317db96d56Sopenharmony_ciPyDoc_STRVAR(select_devpoll_fileno__doc__, 4327db96d56Sopenharmony_ci"fileno($self, /)\n" 4337db96d56Sopenharmony_ci"--\n" 4347db96d56Sopenharmony_ci"\n" 4357db96d56Sopenharmony_ci"Return the file descriptor."); 4367db96d56Sopenharmony_ci 4377db96d56Sopenharmony_ci#define SELECT_DEVPOLL_FILENO_METHODDEF \ 4387db96d56Sopenharmony_ci {"fileno", (PyCFunction)select_devpoll_fileno, METH_NOARGS, select_devpoll_fileno__doc__}, 4397db96d56Sopenharmony_ci 4407db96d56Sopenharmony_cistatic PyObject * 4417db96d56Sopenharmony_ciselect_devpoll_fileno_impl(devpollObject *self); 4427db96d56Sopenharmony_ci 4437db96d56Sopenharmony_cistatic PyObject * 4447db96d56Sopenharmony_ciselect_devpoll_fileno(devpollObject *self, PyObject *Py_UNUSED(ignored)) 4457db96d56Sopenharmony_ci{ 4467db96d56Sopenharmony_ci return select_devpoll_fileno_impl(self); 4477db96d56Sopenharmony_ci} 4487db96d56Sopenharmony_ci 4497db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */ 4507db96d56Sopenharmony_ci 4517db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) 4527db96d56Sopenharmony_ci 4537db96d56Sopenharmony_ciPyDoc_STRVAR(select_poll__doc__, 4547db96d56Sopenharmony_ci"poll($module, /)\n" 4557db96d56Sopenharmony_ci"--\n" 4567db96d56Sopenharmony_ci"\n" 4577db96d56Sopenharmony_ci"Returns a polling object.\n" 4587db96d56Sopenharmony_ci"\n" 4597db96d56Sopenharmony_ci"This object supports registering and unregistering file descriptors, and then\n" 4607db96d56Sopenharmony_ci"polling them for I/O events."); 4617db96d56Sopenharmony_ci 4627db96d56Sopenharmony_ci#define SELECT_POLL_METHODDEF \ 4637db96d56Sopenharmony_ci {"poll", (PyCFunction)select_poll, METH_NOARGS, select_poll__doc__}, 4647db96d56Sopenharmony_ci 4657db96d56Sopenharmony_cistatic PyObject * 4667db96d56Sopenharmony_ciselect_poll_impl(PyObject *module); 4677db96d56Sopenharmony_ci 4687db96d56Sopenharmony_cistatic PyObject * 4697db96d56Sopenharmony_ciselect_poll(PyObject *module, PyObject *Py_UNUSED(ignored)) 4707db96d56Sopenharmony_ci{ 4717db96d56Sopenharmony_ci return select_poll_impl(module); 4727db96d56Sopenharmony_ci} 4737db96d56Sopenharmony_ci 4747db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) */ 4757db96d56Sopenharmony_ci 4767db96d56Sopenharmony_ci#if (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) 4777db96d56Sopenharmony_ci 4787db96d56Sopenharmony_ciPyDoc_STRVAR(select_devpoll__doc__, 4797db96d56Sopenharmony_ci"devpoll($module, /)\n" 4807db96d56Sopenharmony_ci"--\n" 4817db96d56Sopenharmony_ci"\n" 4827db96d56Sopenharmony_ci"Returns a polling object.\n" 4837db96d56Sopenharmony_ci"\n" 4847db96d56Sopenharmony_ci"This object supports registering and unregistering file descriptors, and then\n" 4857db96d56Sopenharmony_ci"polling them for I/O events."); 4867db96d56Sopenharmony_ci 4877db96d56Sopenharmony_ci#define SELECT_DEVPOLL_METHODDEF \ 4887db96d56Sopenharmony_ci {"devpoll", (PyCFunction)select_devpoll, METH_NOARGS, select_devpoll__doc__}, 4897db96d56Sopenharmony_ci 4907db96d56Sopenharmony_cistatic PyObject * 4917db96d56Sopenharmony_ciselect_devpoll_impl(PyObject *module); 4927db96d56Sopenharmony_ci 4937db96d56Sopenharmony_cistatic PyObject * 4947db96d56Sopenharmony_ciselect_devpoll(PyObject *module, PyObject *Py_UNUSED(ignored)) 4957db96d56Sopenharmony_ci{ 4967db96d56Sopenharmony_ci return select_devpoll_impl(module); 4977db96d56Sopenharmony_ci} 4987db96d56Sopenharmony_ci 4997db96d56Sopenharmony_ci#endif /* (defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)) && defined(HAVE_SYS_DEVPOLL_H) */ 5007db96d56Sopenharmony_ci 5017db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 5027db96d56Sopenharmony_ci 5037db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll__doc__, 5047db96d56Sopenharmony_ci"epoll(sizehint=-1, flags=0)\n" 5057db96d56Sopenharmony_ci"--\n" 5067db96d56Sopenharmony_ci"\n" 5077db96d56Sopenharmony_ci"Returns an epolling object.\n" 5087db96d56Sopenharmony_ci"\n" 5097db96d56Sopenharmony_ci" sizehint\n" 5107db96d56Sopenharmony_ci" The expected number of events to be registered. It must be positive,\n" 5117db96d56Sopenharmony_ci" or -1 to use the default. It is only used on older systems where\n" 5127db96d56Sopenharmony_ci" epoll_create1() is not available; otherwise it has no effect (though its\n" 5137db96d56Sopenharmony_ci" value is still checked).\n" 5147db96d56Sopenharmony_ci" flags\n" 5157db96d56Sopenharmony_ci" Deprecated and completely ignored. However, when supplied, its value\n" 5167db96d56Sopenharmony_ci" must be 0 or select.EPOLL_CLOEXEC, otherwise OSError is raised."); 5177db96d56Sopenharmony_ci 5187db96d56Sopenharmony_cistatic PyObject * 5197db96d56Sopenharmony_ciselect_epoll_impl(PyTypeObject *type, int sizehint, int flags); 5207db96d56Sopenharmony_ci 5217db96d56Sopenharmony_cistatic PyObject * 5227db96d56Sopenharmony_ciselect_epoll(PyTypeObject *type, PyObject *args, PyObject *kwargs) 5237db96d56Sopenharmony_ci{ 5247db96d56Sopenharmony_ci PyObject *return_value = NULL; 5257db96d56Sopenharmony_ci static const char * const _keywords[] = {"sizehint", "flags", NULL}; 5267db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "epoll", 0}; 5277db96d56Sopenharmony_ci PyObject *argsbuf[2]; 5287db96d56Sopenharmony_ci PyObject * const *fastargs; 5297db96d56Sopenharmony_ci Py_ssize_t nargs = PyTuple_GET_SIZE(args); 5307db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0; 5317db96d56Sopenharmony_ci int sizehint = -1; 5327db96d56Sopenharmony_ci int flags = 0; 5337db96d56Sopenharmony_ci 5347db96d56Sopenharmony_ci fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 2, 0, argsbuf); 5357db96d56Sopenharmony_ci if (!fastargs) { 5367db96d56Sopenharmony_ci goto exit; 5377db96d56Sopenharmony_ci } 5387db96d56Sopenharmony_ci if (!noptargs) { 5397db96d56Sopenharmony_ci goto skip_optional_pos; 5407db96d56Sopenharmony_ci } 5417db96d56Sopenharmony_ci if (fastargs[0]) { 5427db96d56Sopenharmony_ci sizehint = _PyLong_AsInt(fastargs[0]); 5437db96d56Sopenharmony_ci if (sizehint == -1 && PyErr_Occurred()) { 5447db96d56Sopenharmony_ci goto exit; 5457db96d56Sopenharmony_ci } 5467db96d56Sopenharmony_ci if (!--noptargs) { 5477db96d56Sopenharmony_ci goto skip_optional_pos; 5487db96d56Sopenharmony_ci } 5497db96d56Sopenharmony_ci } 5507db96d56Sopenharmony_ci flags = _PyLong_AsInt(fastargs[1]); 5517db96d56Sopenharmony_ci if (flags == -1 && PyErr_Occurred()) { 5527db96d56Sopenharmony_ci goto exit; 5537db96d56Sopenharmony_ci } 5547db96d56Sopenharmony_ciskip_optional_pos: 5557db96d56Sopenharmony_ci return_value = select_epoll_impl(type, sizehint, flags); 5567db96d56Sopenharmony_ci 5577db96d56Sopenharmony_ciexit: 5587db96d56Sopenharmony_ci return return_value; 5597db96d56Sopenharmony_ci} 5607db96d56Sopenharmony_ci 5617db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 5627db96d56Sopenharmony_ci 5637db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 5647db96d56Sopenharmony_ci 5657db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll_close__doc__, 5667db96d56Sopenharmony_ci"close($self, /)\n" 5677db96d56Sopenharmony_ci"--\n" 5687db96d56Sopenharmony_ci"\n" 5697db96d56Sopenharmony_ci"Close the epoll control file descriptor.\n" 5707db96d56Sopenharmony_ci"\n" 5717db96d56Sopenharmony_ci"Further operations on the epoll object will raise an exception."); 5727db96d56Sopenharmony_ci 5737db96d56Sopenharmony_ci#define SELECT_EPOLL_CLOSE_METHODDEF \ 5747db96d56Sopenharmony_ci {"close", (PyCFunction)select_epoll_close, METH_NOARGS, select_epoll_close__doc__}, 5757db96d56Sopenharmony_ci 5767db96d56Sopenharmony_cistatic PyObject * 5777db96d56Sopenharmony_ciselect_epoll_close_impl(pyEpoll_Object *self); 5787db96d56Sopenharmony_ci 5797db96d56Sopenharmony_cistatic PyObject * 5807db96d56Sopenharmony_ciselect_epoll_close(pyEpoll_Object *self, PyObject *Py_UNUSED(ignored)) 5817db96d56Sopenharmony_ci{ 5827db96d56Sopenharmony_ci return select_epoll_close_impl(self); 5837db96d56Sopenharmony_ci} 5847db96d56Sopenharmony_ci 5857db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 5867db96d56Sopenharmony_ci 5877db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 5887db96d56Sopenharmony_ci 5897db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll_fileno__doc__, 5907db96d56Sopenharmony_ci"fileno($self, /)\n" 5917db96d56Sopenharmony_ci"--\n" 5927db96d56Sopenharmony_ci"\n" 5937db96d56Sopenharmony_ci"Return the epoll control file descriptor."); 5947db96d56Sopenharmony_ci 5957db96d56Sopenharmony_ci#define SELECT_EPOLL_FILENO_METHODDEF \ 5967db96d56Sopenharmony_ci {"fileno", (PyCFunction)select_epoll_fileno, METH_NOARGS, select_epoll_fileno__doc__}, 5977db96d56Sopenharmony_ci 5987db96d56Sopenharmony_cistatic PyObject * 5997db96d56Sopenharmony_ciselect_epoll_fileno_impl(pyEpoll_Object *self); 6007db96d56Sopenharmony_ci 6017db96d56Sopenharmony_cistatic PyObject * 6027db96d56Sopenharmony_ciselect_epoll_fileno(pyEpoll_Object *self, PyObject *Py_UNUSED(ignored)) 6037db96d56Sopenharmony_ci{ 6047db96d56Sopenharmony_ci return select_epoll_fileno_impl(self); 6057db96d56Sopenharmony_ci} 6067db96d56Sopenharmony_ci 6077db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 6087db96d56Sopenharmony_ci 6097db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 6107db96d56Sopenharmony_ci 6117db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll_fromfd__doc__, 6127db96d56Sopenharmony_ci"fromfd($type, fd, /)\n" 6137db96d56Sopenharmony_ci"--\n" 6147db96d56Sopenharmony_ci"\n" 6157db96d56Sopenharmony_ci"Create an epoll object from a given control fd."); 6167db96d56Sopenharmony_ci 6177db96d56Sopenharmony_ci#define SELECT_EPOLL_FROMFD_METHODDEF \ 6187db96d56Sopenharmony_ci {"fromfd", (PyCFunction)select_epoll_fromfd, METH_O|METH_CLASS, select_epoll_fromfd__doc__}, 6197db96d56Sopenharmony_ci 6207db96d56Sopenharmony_cistatic PyObject * 6217db96d56Sopenharmony_ciselect_epoll_fromfd_impl(PyTypeObject *type, int fd); 6227db96d56Sopenharmony_ci 6237db96d56Sopenharmony_cistatic PyObject * 6247db96d56Sopenharmony_ciselect_epoll_fromfd(PyTypeObject *type, PyObject *arg) 6257db96d56Sopenharmony_ci{ 6267db96d56Sopenharmony_ci PyObject *return_value = NULL; 6277db96d56Sopenharmony_ci int fd; 6287db96d56Sopenharmony_ci 6297db96d56Sopenharmony_ci fd = _PyLong_AsInt(arg); 6307db96d56Sopenharmony_ci if (fd == -1 && PyErr_Occurred()) { 6317db96d56Sopenharmony_ci goto exit; 6327db96d56Sopenharmony_ci } 6337db96d56Sopenharmony_ci return_value = select_epoll_fromfd_impl(type, fd); 6347db96d56Sopenharmony_ci 6357db96d56Sopenharmony_ciexit: 6367db96d56Sopenharmony_ci return return_value; 6377db96d56Sopenharmony_ci} 6387db96d56Sopenharmony_ci 6397db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 6407db96d56Sopenharmony_ci 6417db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 6427db96d56Sopenharmony_ci 6437db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll_register__doc__, 6447db96d56Sopenharmony_ci"register($self, /, fd,\n" 6457db96d56Sopenharmony_ci" eventmask=select.EPOLLIN | select.EPOLLPRI | select.EPOLLOUT)\n" 6467db96d56Sopenharmony_ci"--\n" 6477db96d56Sopenharmony_ci"\n" 6487db96d56Sopenharmony_ci"Registers a new fd or raises an OSError if the fd is already registered.\n" 6497db96d56Sopenharmony_ci"\n" 6507db96d56Sopenharmony_ci" fd\n" 6517db96d56Sopenharmony_ci" the target file descriptor of the operation\n" 6527db96d56Sopenharmony_ci" eventmask\n" 6537db96d56Sopenharmony_ci" a bit set composed of the various EPOLL constants\n" 6547db96d56Sopenharmony_ci"\n" 6557db96d56Sopenharmony_ci"The epoll interface supports all file descriptors that support poll."); 6567db96d56Sopenharmony_ci 6577db96d56Sopenharmony_ci#define SELECT_EPOLL_REGISTER_METHODDEF \ 6587db96d56Sopenharmony_ci {"register", _PyCFunction_CAST(select_epoll_register), METH_FASTCALL|METH_KEYWORDS, select_epoll_register__doc__}, 6597db96d56Sopenharmony_ci 6607db96d56Sopenharmony_cistatic PyObject * 6617db96d56Sopenharmony_ciselect_epoll_register_impl(pyEpoll_Object *self, int fd, 6627db96d56Sopenharmony_ci unsigned int eventmask); 6637db96d56Sopenharmony_ci 6647db96d56Sopenharmony_cistatic PyObject * 6657db96d56Sopenharmony_ciselect_epoll_register(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 6667db96d56Sopenharmony_ci{ 6677db96d56Sopenharmony_ci PyObject *return_value = NULL; 6687db96d56Sopenharmony_ci static const char * const _keywords[] = {"fd", "eventmask", NULL}; 6697db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "register", 0}; 6707db96d56Sopenharmony_ci PyObject *argsbuf[2]; 6717db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1; 6727db96d56Sopenharmony_ci int fd; 6737db96d56Sopenharmony_ci unsigned int eventmask = EPOLLIN | EPOLLPRI | EPOLLOUT; 6747db96d56Sopenharmony_ci 6757db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf); 6767db96d56Sopenharmony_ci if (!args) { 6777db96d56Sopenharmony_ci goto exit; 6787db96d56Sopenharmony_ci } 6797db96d56Sopenharmony_ci if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { 6807db96d56Sopenharmony_ci goto exit; 6817db96d56Sopenharmony_ci } 6827db96d56Sopenharmony_ci if (!noptargs) { 6837db96d56Sopenharmony_ci goto skip_optional_pos; 6847db96d56Sopenharmony_ci } 6857db96d56Sopenharmony_ci eventmask = (unsigned int)PyLong_AsUnsignedLongMask(args[1]); 6867db96d56Sopenharmony_ci if (eventmask == (unsigned int)-1 && PyErr_Occurred()) { 6877db96d56Sopenharmony_ci goto exit; 6887db96d56Sopenharmony_ci } 6897db96d56Sopenharmony_ciskip_optional_pos: 6907db96d56Sopenharmony_ci return_value = select_epoll_register_impl(self, fd, eventmask); 6917db96d56Sopenharmony_ci 6927db96d56Sopenharmony_ciexit: 6937db96d56Sopenharmony_ci return return_value; 6947db96d56Sopenharmony_ci} 6957db96d56Sopenharmony_ci 6967db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 6977db96d56Sopenharmony_ci 6987db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 6997db96d56Sopenharmony_ci 7007db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll_modify__doc__, 7017db96d56Sopenharmony_ci"modify($self, /, fd, eventmask)\n" 7027db96d56Sopenharmony_ci"--\n" 7037db96d56Sopenharmony_ci"\n" 7047db96d56Sopenharmony_ci"Modify event mask for a registered file descriptor.\n" 7057db96d56Sopenharmony_ci"\n" 7067db96d56Sopenharmony_ci" fd\n" 7077db96d56Sopenharmony_ci" the target file descriptor of the operation\n" 7087db96d56Sopenharmony_ci" eventmask\n" 7097db96d56Sopenharmony_ci" a bit set composed of the various EPOLL constants"); 7107db96d56Sopenharmony_ci 7117db96d56Sopenharmony_ci#define SELECT_EPOLL_MODIFY_METHODDEF \ 7127db96d56Sopenharmony_ci {"modify", _PyCFunction_CAST(select_epoll_modify), METH_FASTCALL|METH_KEYWORDS, select_epoll_modify__doc__}, 7137db96d56Sopenharmony_ci 7147db96d56Sopenharmony_cistatic PyObject * 7157db96d56Sopenharmony_ciselect_epoll_modify_impl(pyEpoll_Object *self, int fd, 7167db96d56Sopenharmony_ci unsigned int eventmask); 7177db96d56Sopenharmony_ci 7187db96d56Sopenharmony_cistatic PyObject * 7197db96d56Sopenharmony_ciselect_epoll_modify(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 7207db96d56Sopenharmony_ci{ 7217db96d56Sopenharmony_ci PyObject *return_value = NULL; 7227db96d56Sopenharmony_ci static const char * const _keywords[] = {"fd", "eventmask", NULL}; 7237db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "modify", 0}; 7247db96d56Sopenharmony_ci PyObject *argsbuf[2]; 7257db96d56Sopenharmony_ci int fd; 7267db96d56Sopenharmony_ci unsigned int eventmask; 7277db96d56Sopenharmony_ci 7287db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); 7297db96d56Sopenharmony_ci if (!args) { 7307db96d56Sopenharmony_ci goto exit; 7317db96d56Sopenharmony_ci } 7327db96d56Sopenharmony_ci if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { 7337db96d56Sopenharmony_ci goto exit; 7347db96d56Sopenharmony_ci } 7357db96d56Sopenharmony_ci eventmask = (unsigned int)PyLong_AsUnsignedLongMask(args[1]); 7367db96d56Sopenharmony_ci if (eventmask == (unsigned int)-1 && PyErr_Occurred()) { 7377db96d56Sopenharmony_ci goto exit; 7387db96d56Sopenharmony_ci } 7397db96d56Sopenharmony_ci return_value = select_epoll_modify_impl(self, fd, eventmask); 7407db96d56Sopenharmony_ci 7417db96d56Sopenharmony_ciexit: 7427db96d56Sopenharmony_ci return return_value; 7437db96d56Sopenharmony_ci} 7447db96d56Sopenharmony_ci 7457db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 7467db96d56Sopenharmony_ci 7477db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 7487db96d56Sopenharmony_ci 7497db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll_unregister__doc__, 7507db96d56Sopenharmony_ci"unregister($self, /, fd)\n" 7517db96d56Sopenharmony_ci"--\n" 7527db96d56Sopenharmony_ci"\n" 7537db96d56Sopenharmony_ci"Remove a registered file descriptor from the epoll object.\n" 7547db96d56Sopenharmony_ci"\n" 7557db96d56Sopenharmony_ci" fd\n" 7567db96d56Sopenharmony_ci" the target file descriptor of the operation"); 7577db96d56Sopenharmony_ci 7587db96d56Sopenharmony_ci#define SELECT_EPOLL_UNREGISTER_METHODDEF \ 7597db96d56Sopenharmony_ci {"unregister", _PyCFunction_CAST(select_epoll_unregister), METH_FASTCALL|METH_KEYWORDS, select_epoll_unregister__doc__}, 7607db96d56Sopenharmony_ci 7617db96d56Sopenharmony_cistatic PyObject * 7627db96d56Sopenharmony_ciselect_epoll_unregister_impl(pyEpoll_Object *self, int fd); 7637db96d56Sopenharmony_ci 7647db96d56Sopenharmony_cistatic PyObject * 7657db96d56Sopenharmony_ciselect_epoll_unregister(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 7667db96d56Sopenharmony_ci{ 7677db96d56Sopenharmony_ci PyObject *return_value = NULL; 7687db96d56Sopenharmony_ci static const char * const _keywords[] = {"fd", NULL}; 7697db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "unregister", 0}; 7707db96d56Sopenharmony_ci PyObject *argsbuf[1]; 7717db96d56Sopenharmony_ci int fd; 7727db96d56Sopenharmony_ci 7737db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); 7747db96d56Sopenharmony_ci if (!args) { 7757db96d56Sopenharmony_ci goto exit; 7767db96d56Sopenharmony_ci } 7777db96d56Sopenharmony_ci if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { 7787db96d56Sopenharmony_ci goto exit; 7797db96d56Sopenharmony_ci } 7807db96d56Sopenharmony_ci return_value = select_epoll_unregister_impl(self, fd); 7817db96d56Sopenharmony_ci 7827db96d56Sopenharmony_ciexit: 7837db96d56Sopenharmony_ci return return_value; 7847db96d56Sopenharmony_ci} 7857db96d56Sopenharmony_ci 7867db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 7877db96d56Sopenharmony_ci 7887db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 7897db96d56Sopenharmony_ci 7907db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll_poll__doc__, 7917db96d56Sopenharmony_ci"poll($self, /, timeout=None, maxevents=-1)\n" 7927db96d56Sopenharmony_ci"--\n" 7937db96d56Sopenharmony_ci"\n" 7947db96d56Sopenharmony_ci"Wait for events on the epoll file descriptor.\n" 7957db96d56Sopenharmony_ci"\n" 7967db96d56Sopenharmony_ci" timeout\n" 7977db96d56Sopenharmony_ci" the maximum time to wait in seconds (as float);\n" 7987db96d56Sopenharmony_ci" a timeout of None or -1 makes poll wait indefinitely\n" 7997db96d56Sopenharmony_ci" maxevents\n" 8007db96d56Sopenharmony_ci" the maximum number of events returned; -1 means no limit\n" 8017db96d56Sopenharmony_ci"\n" 8027db96d56Sopenharmony_ci"Returns a list containing any descriptors that have events to report,\n" 8037db96d56Sopenharmony_ci"as a list of (fd, events) 2-tuples."); 8047db96d56Sopenharmony_ci 8057db96d56Sopenharmony_ci#define SELECT_EPOLL_POLL_METHODDEF \ 8067db96d56Sopenharmony_ci {"poll", _PyCFunction_CAST(select_epoll_poll), METH_FASTCALL|METH_KEYWORDS, select_epoll_poll__doc__}, 8077db96d56Sopenharmony_ci 8087db96d56Sopenharmony_cistatic PyObject * 8097db96d56Sopenharmony_ciselect_epoll_poll_impl(pyEpoll_Object *self, PyObject *timeout_obj, 8107db96d56Sopenharmony_ci int maxevents); 8117db96d56Sopenharmony_ci 8127db96d56Sopenharmony_cistatic PyObject * 8137db96d56Sopenharmony_ciselect_epoll_poll(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 8147db96d56Sopenharmony_ci{ 8157db96d56Sopenharmony_ci PyObject *return_value = NULL; 8167db96d56Sopenharmony_ci static const char * const _keywords[] = {"timeout", "maxevents", NULL}; 8177db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "poll", 0}; 8187db96d56Sopenharmony_ci PyObject *argsbuf[2]; 8197db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0; 8207db96d56Sopenharmony_ci PyObject *timeout_obj = Py_None; 8217db96d56Sopenharmony_ci int maxevents = -1; 8227db96d56Sopenharmony_ci 8237db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 2, 0, argsbuf); 8247db96d56Sopenharmony_ci if (!args) { 8257db96d56Sopenharmony_ci goto exit; 8267db96d56Sopenharmony_ci } 8277db96d56Sopenharmony_ci if (!noptargs) { 8287db96d56Sopenharmony_ci goto skip_optional_pos; 8297db96d56Sopenharmony_ci } 8307db96d56Sopenharmony_ci if (args[0]) { 8317db96d56Sopenharmony_ci timeout_obj = args[0]; 8327db96d56Sopenharmony_ci if (!--noptargs) { 8337db96d56Sopenharmony_ci goto skip_optional_pos; 8347db96d56Sopenharmony_ci } 8357db96d56Sopenharmony_ci } 8367db96d56Sopenharmony_ci maxevents = _PyLong_AsInt(args[1]); 8377db96d56Sopenharmony_ci if (maxevents == -1 && PyErr_Occurred()) { 8387db96d56Sopenharmony_ci goto exit; 8397db96d56Sopenharmony_ci } 8407db96d56Sopenharmony_ciskip_optional_pos: 8417db96d56Sopenharmony_ci return_value = select_epoll_poll_impl(self, timeout_obj, maxevents); 8427db96d56Sopenharmony_ci 8437db96d56Sopenharmony_ciexit: 8447db96d56Sopenharmony_ci return return_value; 8457db96d56Sopenharmony_ci} 8467db96d56Sopenharmony_ci 8477db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 8487db96d56Sopenharmony_ci 8497db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 8507db96d56Sopenharmony_ci 8517db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll___enter____doc__, 8527db96d56Sopenharmony_ci"__enter__($self, /)\n" 8537db96d56Sopenharmony_ci"--\n" 8547db96d56Sopenharmony_ci"\n"); 8557db96d56Sopenharmony_ci 8567db96d56Sopenharmony_ci#define SELECT_EPOLL___ENTER___METHODDEF \ 8577db96d56Sopenharmony_ci {"__enter__", (PyCFunction)select_epoll___enter__, METH_NOARGS, select_epoll___enter____doc__}, 8587db96d56Sopenharmony_ci 8597db96d56Sopenharmony_cistatic PyObject * 8607db96d56Sopenharmony_ciselect_epoll___enter___impl(pyEpoll_Object *self); 8617db96d56Sopenharmony_ci 8627db96d56Sopenharmony_cistatic PyObject * 8637db96d56Sopenharmony_ciselect_epoll___enter__(pyEpoll_Object *self, PyObject *Py_UNUSED(ignored)) 8647db96d56Sopenharmony_ci{ 8657db96d56Sopenharmony_ci return select_epoll___enter___impl(self); 8667db96d56Sopenharmony_ci} 8677db96d56Sopenharmony_ci 8687db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 8697db96d56Sopenharmony_ci 8707db96d56Sopenharmony_ci#if defined(HAVE_EPOLL) 8717db96d56Sopenharmony_ci 8727db96d56Sopenharmony_ciPyDoc_STRVAR(select_epoll___exit____doc__, 8737db96d56Sopenharmony_ci"__exit__($self, exc_type=None, exc_value=None, exc_tb=None, /)\n" 8747db96d56Sopenharmony_ci"--\n" 8757db96d56Sopenharmony_ci"\n"); 8767db96d56Sopenharmony_ci 8777db96d56Sopenharmony_ci#define SELECT_EPOLL___EXIT___METHODDEF \ 8787db96d56Sopenharmony_ci {"__exit__", _PyCFunction_CAST(select_epoll___exit__), METH_FASTCALL, select_epoll___exit____doc__}, 8797db96d56Sopenharmony_ci 8807db96d56Sopenharmony_cistatic PyObject * 8817db96d56Sopenharmony_ciselect_epoll___exit___impl(pyEpoll_Object *self, PyObject *exc_type, 8827db96d56Sopenharmony_ci PyObject *exc_value, PyObject *exc_tb); 8837db96d56Sopenharmony_ci 8847db96d56Sopenharmony_cistatic PyObject * 8857db96d56Sopenharmony_ciselect_epoll___exit__(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t nargs) 8867db96d56Sopenharmony_ci{ 8877db96d56Sopenharmony_ci PyObject *return_value = NULL; 8887db96d56Sopenharmony_ci PyObject *exc_type = Py_None; 8897db96d56Sopenharmony_ci PyObject *exc_value = Py_None; 8907db96d56Sopenharmony_ci PyObject *exc_tb = Py_None; 8917db96d56Sopenharmony_ci 8927db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("__exit__", nargs, 0, 3)) { 8937db96d56Sopenharmony_ci goto exit; 8947db96d56Sopenharmony_ci } 8957db96d56Sopenharmony_ci if (nargs < 1) { 8967db96d56Sopenharmony_ci goto skip_optional; 8977db96d56Sopenharmony_ci } 8987db96d56Sopenharmony_ci exc_type = args[0]; 8997db96d56Sopenharmony_ci if (nargs < 2) { 9007db96d56Sopenharmony_ci goto skip_optional; 9017db96d56Sopenharmony_ci } 9027db96d56Sopenharmony_ci exc_value = args[1]; 9037db96d56Sopenharmony_ci if (nargs < 3) { 9047db96d56Sopenharmony_ci goto skip_optional; 9057db96d56Sopenharmony_ci } 9067db96d56Sopenharmony_ci exc_tb = args[2]; 9077db96d56Sopenharmony_ciskip_optional: 9087db96d56Sopenharmony_ci return_value = select_epoll___exit___impl(self, exc_type, exc_value, exc_tb); 9097db96d56Sopenharmony_ci 9107db96d56Sopenharmony_ciexit: 9117db96d56Sopenharmony_ci return return_value; 9127db96d56Sopenharmony_ci} 9137db96d56Sopenharmony_ci 9147db96d56Sopenharmony_ci#endif /* defined(HAVE_EPOLL) */ 9157db96d56Sopenharmony_ci 9167db96d56Sopenharmony_ci#if defined(HAVE_KQUEUE) 9177db96d56Sopenharmony_ci 9187db96d56Sopenharmony_ciPyDoc_STRVAR(select_kqueue__doc__, 9197db96d56Sopenharmony_ci"kqueue()\n" 9207db96d56Sopenharmony_ci"--\n" 9217db96d56Sopenharmony_ci"\n" 9227db96d56Sopenharmony_ci"Kqueue syscall wrapper.\n" 9237db96d56Sopenharmony_ci"\n" 9247db96d56Sopenharmony_ci"For example, to start watching a socket for input:\n" 9257db96d56Sopenharmony_ci">>> kq = kqueue()\n" 9267db96d56Sopenharmony_ci">>> sock = socket()\n" 9277db96d56Sopenharmony_ci">>> sock.connect((host, port))\n" 9287db96d56Sopenharmony_ci">>> kq.control([kevent(sock, KQ_FILTER_WRITE, KQ_EV_ADD)], 0)\n" 9297db96d56Sopenharmony_ci"\n" 9307db96d56Sopenharmony_ci"To wait one second for it to become writeable:\n" 9317db96d56Sopenharmony_ci">>> kq.control(None, 1, 1000)\n" 9327db96d56Sopenharmony_ci"\n" 9337db96d56Sopenharmony_ci"To stop listening:\n" 9347db96d56Sopenharmony_ci">>> kq.control([kevent(sock, KQ_FILTER_WRITE, KQ_EV_DELETE)], 0)"); 9357db96d56Sopenharmony_ci 9367db96d56Sopenharmony_cistatic PyObject * 9377db96d56Sopenharmony_ciselect_kqueue_impl(PyTypeObject *type); 9387db96d56Sopenharmony_ci 9397db96d56Sopenharmony_cistatic PyObject * 9407db96d56Sopenharmony_ciselect_kqueue(PyTypeObject *type, PyObject *args, PyObject *kwargs) 9417db96d56Sopenharmony_ci{ 9427db96d56Sopenharmony_ci PyObject *return_value = NULL; 9437db96d56Sopenharmony_ci 9447db96d56Sopenharmony_ci if ((type == _selectstate_by_type(type)->kqueue_queue_Type || 9457db96d56Sopenharmony_ci type->tp_init == _selectstate_by_type(type)->kqueue_queue_Type->tp_init) && 9467db96d56Sopenharmony_ci !_PyArg_NoPositional("kqueue", args)) { 9477db96d56Sopenharmony_ci goto exit; 9487db96d56Sopenharmony_ci } 9497db96d56Sopenharmony_ci if ((type == _selectstate_by_type(type)->kqueue_queue_Type || 9507db96d56Sopenharmony_ci type->tp_init == _selectstate_by_type(type)->kqueue_queue_Type->tp_init) && 9517db96d56Sopenharmony_ci !_PyArg_NoKeywords("kqueue", kwargs)) { 9527db96d56Sopenharmony_ci goto exit; 9537db96d56Sopenharmony_ci } 9547db96d56Sopenharmony_ci return_value = select_kqueue_impl(type); 9557db96d56Sopenharmony_ci 9567db96d56Sopenharmony_ciexit: 9577db96d56Sopenharmony_ci return return_value; 9587db96d56Sopenharmony_ci} 9597db96d56Sopenharmony_ci 9607db96d56Sopenharmony_ci#endif /* defined(HAVE_KQUEUE) */ 9617db96d56Sopenharmony_ci 9627db96d56Sopenharmony_ci#if defined(HAVE_KQUEUE) 9637db96d56Sopenharmony_ci 9647db96d56Sopenharmony_ciPyDoc_STRVAR(select_kqueue_close__doc__, 9657db96d56Sopenharmony_ci"close($self, /)\n" 9667db96d56Sopenharmony_ci"--\n" 9677db96d56Sopenharmony_ci"\n" 9687db96d56Sopenharmony_ci"Close the kqueue control file descriptor.\n" 9697db96d56Sopenharmony_ci"\n" 9707db96d56Sopenharmony_ci"Further operations on the kqueue object will raise an exception."); 9717db96d56Sopenharmony_ci 9727db96d56Sopenharmony_ci#define SELECT_KQUEUE_CLOSE_METHODDEF \ 9737db96d56Sopenharmony_ci {"close", (PyCFunction)select_kqueue_close, METH_NOARGS, select_kqueue_close__doc__}, 9747db96d56Sopenharmony_ci 9757db96d56Sopenharmony_cistatic PyObject * 9767db96d56Sopenharmony_ciselect_kqueue_close_impl(kqueue_queue_Object *self); 9777db96d56Sopenharmony_ci 9787db96d56Sopenharmony_cistatic PyObject * 9797db96d56Sopenharmony_ciselect_kqueue_close(kqueue_queue_Object *self, PyObject *Py_UNUSED(ignored)) 9807db96d56Sopenharmony_ci{ 9817db96d56Sopenharmony_ci return select_kqueue_close_impl(self); 9827db96d56Sopenharmony_ci} 9837db96d56Sopenharmony_ci 9847db96d56Sopenharmony_ci#endif /* defined(HAVE_KQUEUE) */ 9857db96d56Sopenharmony_ci 9867db96d56Sopenharmony_ci#if defined(HAVE_KQUEUE) 9877db96d56Sopenharmony_ci 9887db96d56Sopenharmony_ciPyDoc_STRVAR(select_kqueue_fileno__doc__, 9897db96d56Sopenharmony_ci"fileno($self, /)\n" 9907db96d56Sopenharmony_ci"--\n" 9917db96d56Sopenharmony_ci"\n" 9927db96d56Sopenharmony_ci"Return the kqueue control file descriptor."); 9937db96d56Sopenharmony_ci 9947db96d56Sopenharmony_ci#define SELECT_KQUEUE_FILENO_METHODDEF \ 9957db96d56Sopenharmony_ci {"fileno", (PyCFunction)select_kqueue_fileno, METH_NOARGS, select_kqueue_fileno__doc__}, 9967db96d56Sopenharmony_ci 9977db96d56Sopenharmony_cistatic PyObject * 9987db96d56Sopenharmony_ciselect_kqueue_fileno_impl(kqueue_queue_Object *self); 9997db96d56Sopenharmony_ci 10007db96d56Sopenharmony_cistatic PyObject * 10017db96d56Sopenharmony_ciselect_kqueue_fileno(kqueue_queue_Object *self, PyObject *Py_UNUSED(ignored)) 10027db96d56Sopenharmony_ci{ 10037db96d56Sopenharmony_ci return select_kqueue_fileno_impl(self); 10047db96d56Sopenharmony_ci} 10057db96d56Sopenharmony_ci 10067db96d56Sopenharmony_ci#endif /* defined(HAVE_KQUEUE) */ 10077db96d56Sopenharmony_ci 10087db96d56Sopenharmony_ci#if defined(HAVE_KQUEUE) 10097db96d56Sopenharmony_ci 10107db96d56Sopenharmony_ciPyDoc_STRVAR(select_kqueue_fromfd__doc__, 10117db96d56Sopenharmony_ci"fromfd($type, fd, /)\n" 10127db96d56Sopenharmony_ci"--\n" 10137db96d56Sopenharmony_ci"\n" 10147db96d56Sopenharmony_ci"Create a kqueue object from a given control fd."); 10157db96d56Sopenharmony_ci 10167db96d56Sopenharmony_ci#define SELECT_KQUEUE_FROMFD_METHODDEF \ 10177db96d56Sopenharmony_ci {"fromfd", (PyCFunction)select_kqueue_fromfd, METH_O|METH_CLASS, select_kqueue_fromfd__doc__}, 10187db96d56Sopenharmony_ci 10197db96d56Sopenharmony_cistatic PyObject * 10207db96d56Sopenharmony_ciselect_kqueue_fromfd_impl(PyTypeObject *type, int fd); 10217db96d56Sopenharmony_ci 10227db96d56Sopenharmony_cistatic PyObject * 10237db96d56Sopenharmony_ciselect_kqueue_fromfd(PyTypeObject *type, PyObject *arg) 10247db96d56Sopenharmony_ci{ 10257db96d56Sopenharmony_ci PyObject *return_value = NULL; 10267db96d56Sopenharmony_ci int fd; 10277db96d56Sopenharmony_ci 10287db96d56Sopenharmony_ci fd = _PyLong_AsInt(arg); 10297db96d56Sopenharmony_ci if (fd == -1 && PyErr_Occurred()) { 10307db96d56Sopenharmony_ci goto exit; 10317db96d56Sopenharmony_ci } 10327db96d56Sopenharmony_ci return_value = select_kqueue_fromfd_impl(type, fd); 10337db96d56Sopenharmony_ci 10347db96d56Sopenharmony_ciexit: 10357db96d56Sopenharmony_ci return return_value; 10367db96d56Sopenharmony_ci} 10377db96d56Sopenharmony_ci 10387db96d56Sopenharmony_ci#endif /* defined(HAVE_KQUEUE) */ 10397db96d56Sopenharmony_ci 10407db96d56Sopenharmony_ci#if defined(HAVE_KQUEUE) 10417db96d56Sopenharmony_ci 10427db96d56Sopenharmony_ciPyDoc_STRVAR(select_kqueue_control__doc__, 10437db96d56Sopenharmony_ci"control($self, changelist, maxevents, timeout=None, /)\n" 10447db96d56Sopenharmony_ci"--\n" 10457db96d56Sopenharmony_ci"\n" 10467db96d56Sopenharmony_ci"Calls the kernel kevent function.\n" 10477db96d56Sopenharmony_ci"\n" 10487db96d56Sopenharmony_ci" changelist\n" 10497db96d56Sopenharmony_ci" Must be an iterable of kevent objects describing the changes to be made\n" 10507db96d56Sopenharmony_ci" to the kernel\'s watch list or None.\n" 10517db96d56Sopenharmony_ci" maxevents\n" 10527db96d56Sopenharmony_ci" The maximum number of events that the kernel will return.\n" 10537db96d56Sopenharmony_ci" timeout\n" 10547db96d56Sopenharmony_ci" The maximum time to wait in seconds, or else None to wait forever.\n" 10557db96d56Sopenharmony_ci" This accepts floats for smaller timeouts, too."); 10567db96d56Sopenharmony_ci 10577db96d56Sopenharmony_ci#define SELECT_KQUEUE_CONTROL_METHODDEF \ 10587db96d56Sopenharmony_ci {"control", _PyCFunction_CAST(select_kqueue_control), METH_FASTCALL, select_kqueue_control__doc__}, 10597db96d56Sopenharmony_ci 10607db96d56Sopenharmony_cistatic PyObject * 10617db96d56Sopenharmony_ciselect_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist, 10627db96d56Sopenharmony_ci int maxevents, PyObject *otimeout); 10637db96d56Sopenharmony_ci 10647db96d56Sopenharmony_cistatic PyObject * 10657db96d56Sopenharmony_ciselect_kqueue_control(kqueue_queue_Object *self, PyObject *const *args, Py_ssize_t nargs) 10667db96d56Sopenharmony_ci{ 10677db96d56Sopenharmony_ci PyObject *return_value = NULL; 10687db96d56Sopenharmony_ci PyObject *changelist; 10697db96d56Sopenharmony_ci int maxevents; 10707db96d56Sopenharmony_ci PyObject *otimeout = Py_None; 10717db96d56Sopenharmony_ci 10727db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("control", nargs, 2, 3)) { 10737db96d56Sopenharmony_ci goto exit; 10747db96d56Sopenharmony_ci } 10757db96d56Sopenharmony_ci changelist = args[0]; 10767db96d56Sopenharmony_ci maxevents = _PyLong_AsInt(args[1]); 10777db96d56Sopenharmony_ci if (maxevents == -1 && PyErr_Occurred()) { 10787db96d56Sopenharmony_ci goto exit; 10797db96d56Sopenharmony_ci } 10807db96d56Sopenharmony_ci if (nargs < 3) { 10817db96d56Sopenharmony_ci goto skip_optional; 10827db96d56Sopenharmony_ci } 10837db96d56Sopenharmony_ci otimeout = args[2]; 10847db96d56Sopenharmony_ciskip_optional: 10857db96d56Sopenharmony_ci return_value = select_kqueue_control_impl(self, changelist, maxevents, otimeout); 10867db96d56Sopenharmony_ci 10877db96d56Sopenharmony_ciexit: 10887db96d56Sopenharmony_ci return return_value; 10897db96d56Sopenharmony_ci} 10907db96d56Sopenharmony_ci 10917db96d56Sopenharmony_ci#endif /* defined(HAVE_KQUEUE) */ 10927db96d56Sopenharmony_ci 10937db96d56Sopenharmony_ci#ifndef SELECT_POLL_REGISTER_METHODDEF 10947db96d56Sopenharmony_ci #define SELECT_POLL_REGISTER_METHODDEF 10957db96d56Sopenharmony_ci#endif /* !defined(SELECT_POLL_REGISTER_METHODDEF) */ 10967db96d56Sopenharmony_ci 10977db96d56Sopenharmony_ci#ifndef SELECT_POLL_MODIFY_METHODDEF 10987db96d56Sopenharmony_ci #define SELECT_POLL_MODIFY_METHODDEF 10997db96d56Sopenharmony_ci#endif /* !defined(SELECT_POLL_MODIFY_METHODDEF) */ 11007db96d56Sopenharmony_ci 11017db96d56Sopenharmony_ci#ifndef SELECT_POLL_UNREGISTER_METHODDEF 11027db96d56Sopenharmony_ci #define SELECT_POLL_UNREGISTER_METHODDEF 11037db96d56Sopenharmony_ci#endif /* !defined(SELECT_POLL_UNREGISTER_METHODDEF) */ 11047db96d56Sopenharmony_ci 11057db96d56Sopenharmony_ci#ifndef SELECT_POLL_POLL_METHODDEF 11067db96d56Sopenharmony_ci #define SELECT_POLL_POLL_METHODDEF 11077db96d56Sopenharmony_ci#endif /* !defined(SELECT_POLL_POLL_METHODDEF) */ 11087db96d56Sopenharmony_ci 11097db96d56Sopenharmony_ci#ifndef SELECT_DEVPOLL_REGISTER_METHODDEF 11107db96d56Sopenharmony_ci #define SELECT_DEVPOLL_REGISTER_METHODDEF 11117db96d56Sopenharmony_ci#endif /* !defined(SELECT_DEVPOLL_REGISTER_METHODDEF) */ 11127db96d56Sopenharmony_ci 11137db96d56Sopenharmony_ci#ifndef SELECT_DEVPOLL_MODIFY_METHODDEF 11147db96d56Sopenharmony_ci #define SELECT_DEVPOLL_MODIFY_METHODDEF 11157db96d56Sopenharmony_ci#endif /* !defined(SELECT_DEVPOLL_MODIFY_METHODDEF) */ 11167db96d56Sopenharmony_ci 11177db96d56Sopenharmony_ci#ifndef SELECT_DEVPOLL_UNREGISTER_METHODDEF 11187db96d56Sopenharmony_ci #define SELECT_DEVPOLL_UNREGISTER_METHODDEF 11197db96d56Sopenharmony_ci#endif /* !defined(SELECT_DEVPOLL_UNREGISTER_METHODDEF) */ 11207db96d56Sopenharmony_ci 11217db96d56Sopenharmony_ci#ifndef SELECT_DEVPOLL_POLL_METHODDEF 11227db96d56Sopenharmony_ci #define SELECT_DEVPOLL_POLL_METHODDEF 11237db96d56Sopenharmony_ci#endif /* !defined(SELECT_DEVPOLL_POLL_METHODDEF) */ 11247db96d56Sopenharmony_ci 11257db96d56Sopenharmony_ci#ifndef SELECT_DEVPOLL_CLOSE_METHODDEF 11267db96d56Sopenharmony_ci #define SELECT_DEVPOLL_CLOSE_METHODDEF 11277db96d56Sopenharmony_ci#endif /* !defined(SELECT_DEVPOLL_CLOSE_METHODDEF) */ 11287db96d56Sopenharmony_ci 11297db96d56Sopenharmony_ci#ifndef SELECT_DEVPOLL_FILENO_METHODDEF 11307db96d56Sopenharmony_ci #define SELECT_DEVPOLL_FILENO_METHODDEF 11317db96d56Sopenharmony_ci#endif /* !defined(SELECT_DEVPOLL_FILENO_METHODDEF) */ 11327db96d56Sopenharmony_ci 11337db96d56Sopenharmony_ci#ifndef SELECT_POLL_METHODDEF 11347db96d56Sopenharmony_ci #define SELECT_POLL_METHODDEF 11357db96d56Sopenharmony_ci#endif /* !defined(SELECT_POLL_METHODDEF) */ 11367db96d56Sopenharmony_ci 11377db96d56Sopenharmony_ci#ifndef SELECT_DEVPOLL_METHODDEF 11387db96d56Sopenharmony_ci #define SELECT_DEVPOLL_METHODDEF 11397db96d56Sopenharmony_ci#endif /* !defined(SELECT_DEVPOLL_METHODDEF) */ 11407db96d56Sopenharmony_ci 11417db96d56Sopenharmony_ci#ifndef SELECT_EPOLL_CLOSE_METHODDEF 11427db96d56Sopenharmony_ci #define SELECT_EPOLL_CLOSE_METHODDEF 11437db96d56Sopenharmony_ci#endif /* !defined(SELECT_EPOLL_CLOSE_METHODDEF) */ 11447db96d56Sopenharmony_ci 11457db96d56Sopenharmony_ci#ifndef SELECT_EPOLL_FILENO_METHODDEF 11467db96d56Sopenharmony_ci #define SELECT_EPOLL_FILENO_METHODDEF 11477db96d56Sopenharmony_ci#endif /* !defined(SELECT_EPOLL_FILENO_METHODDEF) */ 11487db96d56Sopenharmony_ci 11497db96d56Sopenharmony_ci#ifndef SELECT_EPOLL_FROMFD_METHODDEF 11507db96d56Sopenharmony_ci #define SELECT_EPOLL_FROMFD_METHODDEF 11517db96d56Sopenharmony_ci#endif /* !defined(SELECT_EPOLL_FROMFD_METHODDEF) */ 11527db96d56Sopenharmony_ci 11537db96d56Sopenharmony_ci#ifndef SELECT_EPOLL_REGISTER_METHODDEF 11547db96d56Sopenharmony_ci #define SELECT_EPOLL_REGISTER_METHODDEF 11557db96d56Sopenharmony_ci#endif /* !defined(SELECT_EPOLL_REGISTER_METHODDEF) */ 11567db96d56Sopenharmony_ci 11577db96d56Sopenharmony_ci#ifndef SELECT_EPOLL_MODIFY_METHODDEF 11587db96d56Sopenharmony_ci #define SELECT_EPOLL_MODIFY_METHODDEF 11597db96d56Sopenharmony_ci#endif /* !defined(SELECT_EPOLL_MODIFY_METHODDEF) */ 11607db96d56Sopenharmony_ci 11617db96d56Sopenharmony_ci#ifndef SELECT_EPOLL_UNREGISTER_METHODDEF 11627db96d56Sopenharmony_ci #define SELECT_EPOLL_UNREGISTER_METHODDEF 11637db96d56Sopenharmony_ci#endif /* !defined(SELECT_EPOLL_UNREGISTER_METHODDEF) */ 11647db96d56Sopenharmony_ci 11657db96d56Sopenharmony_ci#ifndef SELECT_EPOLL_POLL_METHODDEF 11667db96d56Sopenharmony_ci #define SELECT_EPOLL_POLL_METHODDEF 11677db96d56Sopenharmony_ci#endif /* !defined(SELECT_EPOLL_POLL_METHODDEF) */ 11687db96d56Sopenharmony_ci 11697db96d56Sopenharmony_ci#ifndef SELECT_EPOLL___ENTER___METHODDEF 11707db96d56Sopenharmony_ci #define SELECT_EPOLL___ENTER___METHODDEF 11717db96d56Sopenharmony_ci#endif /* !defined(SELECT_EPOLL___ENTER___METHODDEF) */ 11727db96d56Sopenharmony_ci 11737db96d56Sopenharmony_ci#ifndef SELECT_EPOLL___EXIT___METHODDEF 11747db96d56Sopenharmony_ci #define SELECT_EPOLL___EXIT___METHODDEF 11757db96d56Sopenharmony_ci#endif /* !defined(SELECT_EPOLL___EXIT___METHODDEF) */ 11767db96d56Sopenharmony_ci 11777db96d56Sopenharmony_ci#ifndef SELECT_KQUEUE_CLOSE_METHODDEF 11787db96d56Sopenharmony_ci #define SELECT_KQUEUE_CLOSE_METHODDEF 11797db96d56Sopenharmony_ci#endif /* !defined(SELECT_KQUEUE_CLOSE_METHODDEF) */ 11807db96d56Sopenharmony_ci 11817db96d56Sopenharmony_ci#ifndef SELECT_KQUEUE_FILENO_METHODDEF 11827db96d56Sopenharmony_ci #define SELECT_KQUEUE_FILENO_METHODDEF 11837db96d56Sopenharmony_ci#endif /* !defined(SELECT_KQUEUE_FILENO_METHODDEF) */ 11847db96d56Sopenharmony_ci 11857db96d56Sopenharmony_ci#ifndef SELECT_KQUEUE_FROMFD_METHODDEF 11867db96d56Sopenharmony_ci #define SELECT_KQUEUE_FROMFD_METHODDEF 11877db96d56Sopenharmony_ci#endif /* !defined(SELECT_KQUEUE_FROMFD_METHODDEF) */ 11887db96d56Sopenharmony_ci 11897db96d56Sopenharmony_ci#ifndef SELECT_KQUEUE_CONTROL_METHODDEF 11907db96d56Sopenharmony_ci #define SELECT_KQUEUE_CONTROL_METHODDEF 11917db96d56Sopenharmony_ci#endif /* !defined(SELECT_KQUEUE_CONTROL_METHODDEF) */ 11927db96d56Sopenharmony_ci/*[clinic end generated code: output=e77cc5c8a6c77860 input=a9049054013a1b77]*/ 1193