17db96d56Sopenharmony_ci:mod:`select` --- Waiting for I/O completion 27db96d56Sopenharmony_ci============================================ 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: select 57db96d56Sopenharmony_ci :synopsis: Wait for I/O completion on multiple streams. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci-------------- 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ciThis module provides access to the :c:func:`select` and :c:func:`poll` functions 107db96d56Sopenharmony_ciavailable in most operating systems, :c:func:`devpoll` available on 117db96d56Sopenharmony_ciSolaris and derivatives, :c:func:`epoll` available on Linux 2.5+ and 127db96d56Sopenharmony_ci:c:func:`kqueue` available on most BSD. 137db96d56Sopenharmony_ciNote that on Windows, it only works for sockets; on other operating systems, 147db96d56Sopenharmony_ciit also works for other file types (in particular, on Unix, it works on pipes). 157db96d56Sopenharmony_ciIt cannot be used on regular files to determine whether a file has grown since 167db96d56Sopenharmony_ciit was last read. 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci.. note:: 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ci The :mod:`selectors` module allows high-level and efficient I/O 217db96d56Sopenharmony_ci multiplexing, built upon the :mod:`select` module primitives. Users are 227db96d56Sopenharmony_ci encouraged to use the :mod:`selectors` module instead, unless they want 237db96d56Sopenharmony_ci precise control over the OS-level primitives used. 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ciThe module defines the following: 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci.. exception:: error 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci A deprecated alias of :exc:`OSError`. 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci .. versionchanged:: 3.3 357db96d56Sopenharmony_ci Following :pep:`3151`, this class was made an alias of :exc:`OSError`. 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci.. function:: devpoll() 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci (Only supported on Solaris and derivatives.) Returns a ``/dev/poll`` 417db96d56Sopenharmony_ci polling object; see section :ref:`devpoll-objects` below for the 427db96d56Sopenharmony_ci methods supported by devpoll objects. 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci :c:func:`devpoll` objects are linked to the number of file 457db96d56Sopenharmony_ci descriptors allowed at the time of instantiation. If your program 467db96d56Sopenharmony_ci reduces this value, :c:func:`devpoll` will fail. If your program 477db96d56Sopenharmony_ci increases this value, :c:func:`devpoll` may return an 487db96d56Sopenharmony_ci incomplete list of active file descriptors. 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci The new file descriptor is :ref:`non-inheritable <fd_inheritance>`. 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci .. versionadded:: 3.3 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci .. versionchanged:: 3.4 557db96d56Sopenharmony_ci The new file descriptor is now non-inheritable. 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci.. function:: epoll(sizehint=-1, flags=0) 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci (Only supported on Linux 2.5.44 and newer.) Return an edge polling object, 607db96d56Sopenharmony_ci which can be used as Edge or Level Triggered interface for I/O 617db96d56Sopenharmony_ci events. 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci *sizehint* informs epoll about the expected number of events to be 647db96d56Sopenharmony_ci registered. It must be positive, or ``-1`` to use the default. It is only 657db96d56Sopenharmony_ci used on older systems where :c:func:`epoll_create1` is not available; 667db96d56Sopenharmony_ci otherwise it has no effect (though its value is still checked). 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci *flags* is deprecated and completely ignored. However, when supplied, its 697db96d56Sopenharmony_ci value must be ``0`` or ``select.EPOLL_CLOEXEC``, otherwise ``OSError`` is 707db96d56Sopenharmony_ci raised. 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci See the :ref:`epoll-objects` section below for the methods supported by 737db96d56Sopenharmony_ci epolling objects. 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci ``epoll`` objects support the context management protocol: when used in a 767db96d56Sopenharmony_ci :keyword:`with` statement, the new file descriptor is automatically closed 777db96d56Sopenharmony_ci at the end of the block. 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci The new file descriptor is :ref:`non-inheritable <fd_inheritance>`. 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci .. versionchanged:: 3.3 827db96d56Sopenharmony_ci Added the *flags* parameter. 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ci .. versionchanged:: 3.4 857db96d56Sopenharmony_ci Support for the :keyword:`with` statement was added. 867db96d56Sopenharmony_ci The new file descriptor is now non-inheritable. 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci .. deprecated:: 3.4 897db96d56Sopenharmony_ci The *flags* parameter. ``select.EPOLL_CLOEXEC`` is used by default now. 907db96d56Sopenharmony_ci Use :func:`os.set_inheritable` to make the file descriptor inheritable. 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci.. function:: poll() 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci (Not supported by all operating systems.) Returns a polling object, which 967db96d56Sopenharmony_ci supports registering and unregistering file descriptors, and then polling them 977db96d56Sopenharmony_ci for I/O events; see section :ref:`poll-objects` below for the methods supported 987db96d56Sopenharmony_ci by polling objects. 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci.. function:: kqueue() 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci (Only supported on BSD.) Returns a kernel queue object; see section 1047db96d56Sopenharmony_ci :ref:`kqueue-objects` below for the methods supported by kqueue objects. 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ci The new file descriptor is :ref:`non-inheritable <fd_inheritance>`. 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci .. versionchanged:: 3.4 1097db96d56Sopenharmony_ci The new file descriptor is now non-inheritable. 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci.. function:: kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0) 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci (Only supported on BSD.) Returns a kernel event object; see section 1157db96d56Sopenharmony_ci :ref:`kevent-objects` below for the methods supported by kevent objects. 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci.. function:: select(rlist, wlist, xlist[, timeout]) 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ci This is a straightforward interface to the Unix :c:func:`select` system call. 1217db96d56Sopenharmony_ci The first three arguments are iterables of 'waitable objects': either 1227db96d56Sopenharmony_ci integers representing file descriptors or objects with a parameterless method 1237db96d56Sopenharmony_ci named :meth:`~io.IOBase.fileno` returning such an integer: 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci * *rlist*: wait until ready for reading 1267db96d56Sopenharmony_ci * *wlist*: wait until ready for writing 1277db96d56Sopenharmony_ci * *xlist*: wait for an "exceptional condition" (see the manual page for what 1287db96d56Sopenharmony_ci your system considers such a condition) 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci Empty iterables are allowed, but acceptance of three empty iterables is 1317db96d56Sopenharmony_ci platform-dependent. (It is known to work on Unix but not on Windows.) The 1327db96d56Sopenharmony_ci optional *timeout* argument specifies a time-out as a floating point number 1337db96d56Sopenharmony_ci in seconds. When the *timeout* argument is omitted the function blocks until 1347db96d56Sopenharmony_ci at least one file descriptor is ready. A time-out value of zero specifies a 1357db96d56Sopenharmony_ci poll and never blocks. 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci The return value is a triple of lists of objects that are ready: subsets of the 1387db96d56Sopenharmony_ci first three arguments. When the time-out is reached without a file descriptor 1397db96d56Sopenharmony_ci becoming ready, three empty lists are returned. 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci .. index:: 1427db96d56Sopenharmony_ci single: socket() (in module socket) 1437db96d56Sopenharmony_ci single: popen() (in module os) 1447db96d56Sopenharmony_ci 1457db96d56Sopenharmony_ci Among the acceptable object types in the iterables are Python :term:`file 1467db96d56Sopenharmony_ci objects <file object>` (e.g. ``sys.stdin``, or objects returned by 1477db96d56Sopenharmony_ci :func:`open` or :func:`os.popen`), socket objects returned by 1487db96d56Sopenharmony_ci :func:`socket.socket`. You may also define a :dfn:`wrapper` class yourself, 1497db96d56Sopenharmony_ci as long as it has an appropriate :meth:`~io.IOBase.fileno` method (that 1507db96d56Sopenharmony_ci really returns a file descriptor, not just a random integer). 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ci .. note:: 1537db96d56Sopenharmony_ci 1547db96d56Sopenharmony_ci .. index:: single: WinSock 1557db96d56Sopenharmony_ci 1567db96d56Sopenharmony_ci File objects on Windows are not acceptable, but sockets are. On Windows, 1577db96d56Sopenharmony_ci the underlying :c:func:`select` function is provided by the WinSock 1587db96d56Sopenharmony_ci library, and does not handle file descriptors that don't originate from 1597db96d56Sopenharmony_ci WinSock. 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci .. versionchanged:: 3.5 1627db96d56Sopenharmony_ci The function is now retried with a recomputed timeout when interrupted by 1637db96d56Sopenharmony_ci a signal, except if the signal handler raises an exception (see 1647db96d56Sopenharmony_ci :pep:`475` for the rationale), instead of raising 1657db96d56Sopenharmony_ci :exc:`InterruptedError`. 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_ci.. attribute:: PIPE_BUF 1697db96d56Sopenharmony_ci 1707db96d56Sopenharmony_ci The minimum number of bytes which can be written without blocking to a pipe 1717db96d56Sopenharmony_ci when the pipe has been reported as ready for writing by :func:`~select.select`, 1727db96d56Sopenharmony_ci :func:`poll` or another interface in this module. This doesn't apply 1737db96d56Sopenharmony_ci to other kind of file-like objects such as sockets. 1747db96d56Sopenharmony_ci 1757db96d56Sopenharmony_ci This value is guaranteed by POSIX to be at least 512. 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci .. availability:: Unix 1787db96d56Sopenharmony_ci 1797db96d56Sopenharmony_ci .. versionadded:: 3.2 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci.. _devpoll-objects: 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci``/dev/poll`` Polling Objects 1857db96d56Sopenharmony_ci----------------------------- 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ciSolaris and derivatives have ``/dev/poll``. While :c:func:`select` is 1887db96d56Sopenharmony_ciO(highest file descriptor) and :c:func:`poll` is O(number of file 1897db96d56Sopenharmony_cidescriptors), ``/dev/poll`` is O(active file descriptors). 1907db96d56Sopenharmony_ci 1917db96d56Sopenharmony_ci``/dev/poll`` behaviour is very close to the standard :c:func:`poll` 1927db96d56Sopenharmony_ciobject. 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci 1957db96d56Sopenharmony_ci.. method:: devpoll.close() 1967db96d56Sopenharmony_ci 1977db96d56Sopenharmony_ci Close the file descriptor of the polling object. 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci .. versionadded:: 3.4 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ci.. attribute:: devpoll.closed 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci ``True`` if the polling object is closed. 2057db96d56Sopenharmony_ci 2067db96d56Sopenharmony_ci .. versionadded:: 3.4 2077db96d56Sopenharmony_ci 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci.. method:: devpoll.fileno() 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ci Return the file descriptor number of the polling object. 2127db96d56Sopenharmony_ci 2137db96d56Sopenharmony_ci .. versionadded:: 3.4 2147db96d56Sopenharmony_ci 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci.. method:: devpoll.register(fd[, eventmask]) 2177db96d56Sopenharmony_ci 2187db96d56Sopenharmony_ci Register a file descriptor with the polling object. Future calls to the 2197db96d56Sopenharmony_ci :meth:`poll` method will then check whether the file descriptor has any 2207db96d56Sopenharmony_ci pending I/O events. *fd* can be either an integer, or an object with a 2217db96d56Sopenharmony_ci :meth:`~io.IOBase.fileno` method that returns an integer. File objects 2227db96d56Sopenharmony_ci implement :meth:`!fileno`, so they can also be used as the argument. 2237db96d56Sopenharmony_ci 2247db96d56Sopenharmony_ci *eventmask* is an optional bitmask describing the type of events you want to 2257db96d56Sopenharmony_ci check for. The constants are the same that with :c:func:`poll` 2267db96d56Sopenharmony_ci object. The default value is a combination of the constants :const:`POLLIN`, 2277db96d56Sopenharmony_ci :const:`POLLPRI`, and :const:`POLLOUT`. 2287db96d56Sopenharmony_ci 2297db96d56Sopenharmony_ci .. warning:: 2307db96d56Sopenharmony_ci 2317db96d56Sopenharmony_ci Registering a file descriptor that's already registered is not an 2327db96d56Sopenharmony_ci error, but the result is undefined. The appropriate action is to 2337db96d56Sopenharmony_ci unregister or modify it first. This is an important difference 2347db96d56Sopenharmony_ci compared with :c:func:`poll`. 2357db96d56Sopenharmony_ci 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci.. method:: devpoll.modify(fd[, eventmask]) 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci This method does an :meth:`unregister` followed by a 2407db96d56Sopenharmony_ci :meth:`register`. It is (a bit) more efficient that doing the same 2417db96d56Sopenharmony_ci explicitly. 2427db96d56Sopenharmony_ci 2437db96d56Sopenharmony_ci 2447db96d56Sopenharmony_ci.. method:: devpoll.unregister(fd) 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci Remove a file descriptor being tracked by a polling object. Just like the 2477db96d56Sopenharmony_ci :meth:`register` method, *fd* can be an integer or an object with a 2487db96d56Sopenharmony_ci :meth:`~io.IOBase.fileno` method that returns an integer. 2497db96d56Sopenharmony_ci 2507db96d56Sopenharmony_ci Attempting to remove a file descriptor that was never registered is 2517db96d56Sopenharmony_ci safely ignored. 2527db96d56Sopenharmony_ci 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci.. method:: devpoll.poll([timeout]) 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ci Polls the set of registered file descriptors, and returns a possibly empty list 2577db96d56Sopenharmony_ci containing ``(fd, event)`` 2-tuples for the descriptors that have events or 2587db96d56Sopenharmony_ci errors to report. *fd* is the file descriptor, and *event* is a bitmask with 2597db96d56Sopenharmony_ci bits set for the reported events for that descriptor --- :const:`POLLIN` for 2607db96d56Sopenharmony_ci waiting input, :const:`POLLOUT` to indicate that the descriptor can be written 2617db96d56Sopenharmony_ci to, and so forth. An empty list indicates that the call timed out and no file 2627db96d56Sopenharmony_ci descriptors had any events to report. If *timeout* is given, it specifies the 2637db96d56Sopenharmony_ci length of time in milliseconds which the system will wait for events before 2647db96d56Sopenharmony_ci returning. If *timeout* is omitted, -1, or :const:`None`, the call will 2657db96d56Sopenharmony_ci block until there is an event for this poll object. 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ci .. versionchanged:: 3.5 2687db96d56Sopenharmony_ci The function is now retried with a recomputed timeout when interrupted by 2697db96d56Sopenharmony_ci a signal, except if the signal handler raises an exception (see 2707db96d56Sopenharmony_ci :pep:`475` for the rationale), instead of raising 2717db96d56Sopenharmony_ci :exc:`InterruptedError`. 2727db96d56Sopenharmony_ci 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci.. _epoll-objects: 2757db96d56Sopenharmony_ci 2767db96d56Sopenharmony_ciEdge and Level Trigger Polling (epoll) Objects 2777db96d56Sopenharmony_ci---------------------------------------------- 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci https://linux.die.net/man/4/epoll 2807db96d56Sopenharmony_ci 2817db96d56Sopenharmony_ci *eventmask* 2827db96d56Sopenharmony_ci 2837db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 2847db96d56Sopenharmony_ci | Constant | Meaning | 2857db96d56Sopenharmony_ci +=========================+===============================================+ 2867db96d56Sopenharmony_ci | :const:`EPOLLIN` | Available for read | 2877db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 2887db96d56Sopenharmony_ci | :const:`EPOLLOUT` | Available for write | 2897db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 2907db96d56Sopenharmony_ci | :const:`EPOLLPRI` | Urgent data for read | 2917db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 2927db96d56Sopenharmony_ci | :const:`EPOLLERR` | Error condition happened on the assoc. fd | 2937db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 2947db96d56Sopenharmony_ci | :const:`EPOLLHUP` | Hang up happened on the assoc. fd | 2957db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 2967db96d56Sopenharmony_ci | :const:`EPOLLET` | Set Edge Trigger behavior, the default is | 2977db96d56Sopenharmony_ci | | Level Trigger behavior | 2987db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 2997db96d56Sopenharmony_ci | :const:`EPOLLONESHOT` | Set one-shot behavior. After one event is | 3007db96d56Sopenharmony_ci | | pulled out, the fd is internally disabled | 3017db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 3027db96d56Sopenharmony_ci | :const:`EPOLLEXCLUSIVE` | Wake only one epoll object when the | 3037db96d56Sopenharmony_ci | | associated fd has an event. The default (if | 3047db96d56Sopenharmony_ci | | this flag is not set) is to wake all epoll | 3057db96d56Sopenharmony_ci | | objects polling on a fd. | 3067db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 3077db96d56Sopenharmony_ci | :const:`EPOLLRDHUP` | Stream socket peer closed connection or shut | 3087db96d56Sopenharmony_ci | | down writing half of connection. | 3097db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 3107db96d56Sopenharmony_ci | :const:`EPOLLRDNORM` | Equivalent to :const:`EPOLLIN` | 3117db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 3127db96d56Sopenharmony_ci | :const:`EPOLLRDBAND` | Priority data band can be read. | 3137db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 3147db96d56Sopenharmony_ci | :const:`EPOLLWRNORM` | Equivalent to :const:`EPOLLOUT` | 3157db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 3167db96d56Sopenharmony_ci | :const:`EPOLLWRBAND` | Priority data may be written. | 3177db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 3187db96d56Sopenharmony_ci | :const:`EPOLLMSG` | Ignored. | 3197db96d56Sopenharmony_ci +-------------------------+-----------------------------------------------+ 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_ci .. versionadded:: 3.6 3227db96d56Sopenharmony_ci :const:`EPOLLEXCLUSIVE` was added. It's only supported by Linux Kernel 4.5 3237db96d56Sopenharmony_ci or later. 3247db96d56Sopenharmony_ci 3257db96d56Sopenharmony_ci.. method:: epoll.close() 3267db96d56Sopenharmony_ci 3277db96d56Sopenharmony_ci Close the control file descriptor of the epoll object. 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci 3307db96d56Sopenharmony_ci.. attribute:: epoll.closed 3317db96d56Sopenharmony_ci 3327db96d56Sopenharmony_ci ``True`` if the epoll object is closed. 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ci 3357db96d56Sopenharmony_ci.. method:: epoll.fileno() 3367db96d56Sopenharmony_ci 3377db96d56Sopenharmony_ci Return the file descriptor number of the control fd. 3387db96d56Sopenharmony_ci 3397db96d56Sopenharmony_ci 3407db96d56Sopenharmony_ci.. method:: epoll.fromfd(fd) 3417db96d56Sopenharmony_ci 3427db96d56Sopenharmony_ci Create an epoll object from a given file descriptor. 3437db96d56Sopenharmony_ci 3447db96d56Sopenharmony_ci 3457db96d56Sopenharmony_ci.. method:: epoll.register(fd[, eventmask]) 3467db96d56Sopenharmony_ci 3477db96d56Sopenharmony_ci Register a fd descriptor with the epoll object. 3487db96d56Sopenharmony_ci 3497db96d56Sopenharmony_ci 3507db96d56Sopenharmony_ci.. method:: epoll.modify(fd, eventmask) 3517db96d56Sopenharmony_ci 3527db96d56Sopenharmony_ci Modify a registered file descriptor. 3537db96d56Sopenharmony_ci 3547db96d56Sopenharmony_ci 3557db96d56Sopenharmony_ci.. method:: epoll.unregister(fd) 3567db96d56Sopenharmony_ci 3577db96d56Sopenharmony_ci Remove a registered file descriptor from the epoll object. 3587db96d56Sopenharmony_ci 3597db96d56Sopenharmony_ci .. versionchanged:: 3.9 3607db96d56Sopenharmony_ci The method no longer ignores the :data:`~errno.EBADF` error. 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci 3637db96d56Sopenharmony_ci.. method:: epoll.poll(timeout=None, maxevents=-1) 3647db96d56Sopenharmony_ci 3657db96d56Sopenharmony_ci Wait for events. timeout in seconds (float) 3667db96d56Sopenharmony_ci 3677db96d56Sopenharmony_ci .. versionchanged:: 3.5 3687db96d56Sopenharmony_ci The function is now retried with a recomputed timeout when interrupted by 3697db96d56Sopenharmony_ci a signal, except if the signal handler raises an exception (see 3707db96d56Sopenharmony_ci :pep:`475` for the rationale), instead of raising 3717db96d56Sopenharmony_ci :exc:`InterruptedError`. 3727db96d56Sopenharmony_ci 3737db96d56Sopenharmony_ci 3747db96d56Sopenharmony_ci.. _poll-objects: 3757db96d56Sopenharmony_ci 3767db96d56Sopenharmony_ciPolling Objects 3777db96d56Sopenharmony_ci--------------- 3787db96d56Sopenharmony_ci 3797db96d56Sopenharmony_ciThe :c:func:`poll` system call, supported on most Unix systems, provides better 3807db96d56Sopenharmony_ciscalability for network servers that service many, many clients at the same 3817db96d56Sopenharmony_citime. :c:func:`poll` scales better because the system call only requires listing 3827db96d56Sopenharmony_cithe file descriptors of interest, while :c:func:`select` builds a bitmap, turns 3837db96d56Sopenharmony_cion bits for the fds of interest, and then afterward the whole bitmap has to be 3847db96d56Sopenharmony_cilinearly scanned again. :c:func:`select` is O(highest file descriptor), while 3857db96d56Sopenharmony_ci:c:func:`poll` is O(number of file descriptors). 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_ci 3887db96d56Sopenharmony_ci.. method:: poll.register(fd[, eventmask]) 3897db96d56Sopenharmony_ci 3907db96d56Sopenharmony_ci Register a file descriptor with the polling object. Future calls to the 3917db96d56Sopenharmony_ci :meth:`poll` method will then check whether the file descriptor has any 3927db96d56Sopenharmony_ci pending I/O events. *fd* can be either an integer, or an object with a 3937db96d56Sopenharmony_ci :meth:`~io.IOBase.fileno` method that returns an integer. File objects 3947db96d56Sopenharmony_ci implement :meth:`!fileno`, so they can also be used as the argument. 3957db96d56Sopenharmony_ci 3967db96d56Sopenharmony_ci *eventmask* is an optional bitmask describing the type of events you want to 3977db96d56Sopenharmony_ci check for, and can be a combination of the constants :const:`POLLIN`, 3987db96d56Sopenharmony_ci :const:`POLLPRI`, and :const:`POLLOUT`, described in the table below. If not 3997db96d56Sopenharmony_ci specified, the default value used will check for all 3 types of events. 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci +-------------------+------------------------------------------+ 4027db96d56Sopenharmony_ci | Constant | Meaning | 4037db96d56Sopenharmony_ci +===================+==========================================+ 4047db96d56Sopenharmony_ci | :const:`POLLIN` | There is data to read | 4057db96d56Sopenharmony_ci +-------------------+------------------------------------------+ 4067db96d56Sopenharmony_ci | :const:`POLLPRI` | There is urgent data to read | 4077db96d56Sopenharmony_ci +-------------------+------------------------------------------+ 4087db96d56Sopenharmony_ci | :const:`POLLOUT` | Ready for output: writing will not block | 4097db96d56Sopenharmony_ci +-------------------+------------------------------------------+ 4107db96d56Sopenharmony_ci | :const:`POLLERR` | Error condition of some sort | 4117db96d56Sopenharmony_ci +-------------------+------------------------------------------+ 4127db96d56Sopenharmony_ci | :const:`POLLHUP` | Hung up | 4137db96d56Sopenharmony_ci +-------------------+------------------------------------------+ 4147db96d56Sopenharmony_ci | :const:`POLLRDHUP`| Stream socket peer closed connection, or | 4157db96d56Sopenharmony_ci | | shut down writing half of connection | 4167db96d56Sopenharmony_ci +-------------------+------------------------------------------+ 4177db96d56Sopenharmony_ci | :const:`POLLNVAL` | Invalid request: descriptor not open | 4187db96d56Sopenharmony_ci +-------------------+------------------------------------------+ 4197db96d56Sopenharmony_ci 4207db96d56Sopenharmony_ci Registering a file descriptor that's already registered is not an error, and has 4217db96d56Sopenharmony_ci the same effect as registering the descriptor exactly once. 4227db96d56Sopenharmony_ci 4237db96d56Sopenharmony_ci 4247db96d56Sopenharmony_ci.. method:: poll.modify(fd, eventmask) 4257db96d56Sopenharmony_ci 4267db96d56Sopenharmony_ci Modifies an already registered fd. This has the same effect as 4277db96d56Sopenharmony_ci ``register(fd, eventmask)``. Attempting to modify a file descriptor 4287db96d56Sopenharmony_ci that was never registered causes an :exc:`OSError` exception with errno 4297db96d56Sopenharmony_ci :const:`ENOENT` to be raised. 4307db96d56Sopenharmony_ci 4317db96d56Sopenharmony_ci 4327db96d56Sopenharmony_ci.. method:: poll.unregister(fd) 4337db96d56Sopenharmony_ci 4347db96d56Sopenharmony_ci Remove a file descriptor being tracked by a polling object. Just like the 4357db96d56Sopenharmony_ci :meth:`register` method, *fd* can be an integer or an object with a 4367db96d56Sopenharmony_ci :meth:`~io.IOBase.fileno` method that returns an integer. 4377db96d56Sopenharmony_ci 4387db96d56Sopenharmony_ci Attempting to remove a file descriptor that was never registered causes a 4397db96d56Sopenharmony_ci :exc:`KeyError` exception to be raised. 4407db96d56Sopenharmony_ci 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ci.. method:: poll.poll([timeout]) 4437db96d56Sopenharmony_ci 4447db96d56Sopenharmony_ci Polls the set of registered file descriptors, and returns a possibly empty list 4457db96d56Sopenharmony_ci containing ``(fd, event)`` 2-tuples for the descriptors that have events or 4467db96d56Sopenharmony_ci errors to report. *fd* is the file descriptor, and *event* is a bitmask with 4477db96d56Sopenharmony_ci bits set for the reported events for that descriptor --- :const:`POLLIN` for 4487db96d56Sopenharmony_ci waiting input, :const:`POLLOUT` to indicate that the descriptor can be written 4497db96d56Sopenharmony_ci to, and so forth. An empty list indicates that the call timed out and no file 4507db96d56Sopenharmony_ci descriptors had any events to report. If *timeout* is given, it specifies the 4517db96d56Sopenharmony_ci length of time in milliseconds which the system will wait for events before 4527db96d56Sopenharmony_ci returning. If *timeout* is omitted, negative, or :const:`None`, the call will 4537db96d56Sopenharmony_ci block until there is an event for this poll object. 4547db96d56Sopenharmony_ci 4557db96d56Sopenharmony_ci .. versionchanged:: 3.5 4567db96d56Sopenharmony_ci The function is now retried with a recomputed timeout when interrupted by 4577db96d56Sopenharmony_ci a signal, except if the signal handler raises an exception (see 4587db96d56Sopenharmony_ci :pep:`475` for the rationale), instead of raising 4597db96d56Sopenharmony_ci :exc:`InterruptedError`. 4607db96d56Sopenharmony_ci 4617db96d56Sopenharmony_ci 4627db96d56Sopenharmony_ci.. _kqueue-objects: 4637db96d56Sopenharmony_ci 4647db96d56Sopenharmony_ciKqueue Objects 4657db96d56Sopenharmony_ci-------------- 4667db96d56Sopenharmony_ci 4677db96d56Sopenharmony_ci.. method:: kqueue.close() 4687db96d56Sopenharmony_ci 4697db96d56Sopenharmony_ci Close the control file descriptor of the kqueue object. 4707db96d56Sopenharmony_ci 4717db96d56Sopenharmony_ci 4727db96d56Sopenharmony_ci.. attribute:: kqueue.closed 4737db96d56Sopenharmony_ci 4747db96d56Sopenharmony_ci ``True`` if the kqueue object is closed. 4757db96d56Sopenharmony_ci 4767db96d56Sopenharmony_ci 4777db96d56Sopenharmony_ci.. method:: kqueue.fileno() 4787db96d56Sopenharmony_ci 4797db96d56Sopenharmony_ci Return the file descriptor number of the control fd. 4807db96d56Sopenharmony_ci 4817db96d56Sopenharmony_ci 4827db96d56Sopenharmony_ci.. method:: kqueue.fromfd(fd) 4837db96d56Sopenharmony_ci 4847db96d56Sopenharmony_ci Create a kqueue object from a given file descriptor. 4857db96d56Sopenharmony_ci 4867db96d56Sopenharmony_ci 4877db96d56Sopenharmony_ci.. method:: kqueue.control(changelist, max_events[, timeout]) -> eventlist 4887db96d56Sopenharmony_ci 4897db96d56Sopenharmony_ci Low level interface to kevent 4907db96d56Sopenharmony_ci 4917db96d56Sopenharmony_ci - changelist must be an iterable of kevent objects or ``None`` 4927db96d56Sopenharmony_ci - max_events must be 0 or a positive integer 4937db96d56Sopenharmony_ci - timeout in seconds (floats possible); the default is ``None``, 4947db96d56Sopenharmony_ci to wait forever 4957db96d56Sopenharmony_ci 4967db96d56Sopenharmony_ci .. versionchanged:: 3.5 4977db96d56Sopenharmony_ci The function is now retried with a recomputed timeout when interrupted by 4987db96d56Sopenharmony_ci a signal, except if the signal handler raises an exception (see 4997db96d56Sopenharmony_ci :pep:`475` for the rationale), instead of raising 5007db96d56Sopenharmony_ci :exc:`InterruptedError`. 5017db96d56Sopenharmony_ci 5027db96d56Sopenharmony_ci 5037db96d56Sopenharmony_ci.. _kevent-objects: 5047db96d56Sopenharmony_ci 5057db96d56Sopenharmony_ciKevent Objects 5067db96d56Sopenharmony_ci-------------- 5077db96d56Sopenharmony_ci 5087db96d56Sopenharmony_cihttps://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 5097db96d56Sopenharmony_ci 5107db96d56Sopenharmony_ci.. attribute:: kevent.ident 5117db96d56Sopenharmony_ci 5127db96d56Sopenharmony_ci Value used to identify the event. The interpretation depends on the filter 5137db96d56Sopenharmony_ci but it's usually the file descriptor. In the constructor ident can either 5147db96d56Sopenharmony_ci be an int or an object with a :meth:`~io.IOBase.fileno` method. kevent 5157db96d56Sopenharmony_ci stores the integer internally. 5167db96d56Sopenharmony_ci 5177db96d56Sopenharmony_ci.. attribute:: kevent.filter 5187db96d56Sopenharmony_ci 5197db96d56Sopenharmony_ci Name of the kernel filter. 5207db96d56Sopenharmony_ci 5217db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5227db96d56Sopenharmony_ci | Constant | Meaning | 5237db96d56Sopenharmony_ci +===========================+=============================================+ 5247db96d56Sopenharmony_ci | :const:`KQ_FILTER_READ` | Takes a descriptor and returns whenever | 5257db96d56Sopenharmony_ci | | there is data available to read | 5267db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5277db96d56Sopenharmony_ci | :const:`KQ_FILTER_WRITE` | Takes a descriptor and returns whenever | 5287db96d56Sopenharmony_ci | | there is data available to write | 5297db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5307db96d56Sopenharmony_ci | :const:`KQ_FILTER_AIO` | AIO requests | 5317db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5327db96d56Sopenharmony_ci | :const:`KQ_FILTER_VNODE` | Returns when one or more of the requested | 5337db96d56Sopenharmony_ci | | events watched in *fflag* occurs | 5347db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5357db96d56Sopenharmony_ci | :const:`KQ_FILTER_PROC` | Watch for events on a process id | 5367db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5377db96d56Sopenharmony_ci | :const:`KQ_FILTER_NETDEV` | Watch for events on a network device | 5387db96d56Sopenharmony_ci | | [not available on macOS] | 5397db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5407db96d56Sopenharmony_ci | :const:`KQ_FILTER_SIGNAL` | Returns whenever the watched signal is | 5417db96d56Sopenharmony_ci | | delivered to the process | 5427db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5437db96d56Sopenharmony_ci | :const:`KQ_FILTER_TIMER` | Establishes an arbitrary timer | 5447db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5457db96d56Sopenharmony_ci 5467db96d56Sopenharmony_ci.. attribute:: kevent.flags 5477db96d56Sopenharmony_ci 5487db96d56Sopenharmony_ci Filter action. 5497db96d56Sopenharmony_ci 5507db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5517db96d56Sopenharmony_ci | Constant | Meaning | 5527db96d56Sopenharmony_ci +===========================+=============================================+ 5537db96d56Sopenharmony_ci | :const:`KQ_EV_ADD` | Adds or modifies an event | 5547db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5557db96d56Sopenharmony_ci | :const:`KQ_EV_DELETE` | Removes an event from the queue | 5567db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5577db96d56Sopenharmony_ci | :const:`KQ_EV_ENABLE` | Permitscontrol() to returns the event | 5587db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5597db96d56Sopenharmony_ci | :const:`KQ_EV_DISABLE` | Disablesevent | 5607db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5617db96d56Sopenharmony_ci | :const:`KQ_EV_ONESHOT` | Removes event after first occurrence | 5627db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5637db96d56Sopenharmony_ci | :const:`KQ_EV_CLEAR` | Reset the state after an event is retrieved | 5647db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5657db96d56Sopenharmony_ci | :const:`KQ_EV_SYSFLAGS` | internal event | 5667db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5677db96d56Sopenharmony_ci | :const:`KQ_EV_FLAG1` | internal event | 5687db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5697db96d56Sopenharmony_ci | :const:`KQ_EV_EOF` | Filter specific EOF condition | 5707db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5717db96d56Sopenharmony_ci | :const:`KQ_EV_ERROR` | See return values | 5727db96d56Sopenharmony_ci +---------------------------+---------------------------------------------+ 5737db96d56Sopenharmony_ci 5747db96d56Sopenharmony_ci 5757db96d56Sopenharmony_ci.. attribute:: kevent.fflags 5767db96d56Sopenharmony_ci 5777db96d56Sopenharmony_ci Filter specific flags. 5787db96d56Sopenharmony_ci 5797db96d56Sopenharmony_ci :const:`KQ_FILTER_READ` and :const:`KQ_FILTER_WRITE` filter flags: 5807db96d56Sopenharmony_ci 5817db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 5827db96d56Sopenharmony_ci | Constant | Meaning | 5837db96d56Sopenharmony_ci +============================+============================================+ 5847db96d56Sopenharmony_ci | :const:`KQ_NOTE_LOWAT` | low water mark of a socket buffer | 5857db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 5867db96d56Sopenharmony_ci 5877db96d56Sopenharmony_ci :const:`KQ_FILTER_VNODE` filter flags: 5887db96d56Sopenharmony_ci 5897db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 5907db96d56Sopenharmony_ci | Constant | Meaning | 5917db96d56Sopenharmony_ci +============================+============================================+ 5927db96d56Sopenharmony_ci | :const:`KQ_NOTE_DELETE` | *unlink()* was called | 5937db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 5947db96d56Sopenharmony_ci | :const:`KQ_NOTE_WRITE` | a write occurred | 5957db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 5967db96d56Sopenharmony_ci | :const:`KQ_NOTE_EXTEND` | the file was extended | 5977db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 5987db96d56Sopenharmony_ci | :const:`KQ_NOTE_ATTRIB` | an attribute was changed | 5997db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6007db96d56Sopenharmony_ci | :const:`KQ_NOTE_LINK` | the link count has changed | 6017db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6027db96d56Sopenharmony_ci | :const:`KQ_NOTE_RENAME` | the file was renamed | 6037db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6047db96d56Sopenharmony_ci | :const:`KQ_NOTE_REVOKE` | access to the file was revoked | 6057db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6067db96d56Sopenharmony_ci 6077db96d56Sopenharmony_ci :const:`KQ_FILTER_PROC` filter flags: 6087db96d56Sopenharmony_ci 6097db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6107db96d56Sopenharmony_ci | Constant | Meaning | 6117db96d56Sopenharmony_ci +============================+============================================+ 6127db96d56Sopenharmony_ci | :const:`KQ_NOTE_EXIT` | the process has exited | 6137db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6147db96d56Sopenharmony_ci | :const:`KQ_NOTE_FORK` | the process has called *fork()* | 6157db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6167db96d56Sopenharmony_ci | :const:`KQ_NOTE_EXEC` | the process has executed a new process | 6177db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6187db96d56Sopenharmony_ci | :const:`KQ_NOTE_PCTRLMASK` | internal filter flag | 6197db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6207db96d56Sopenharmony_ci | :const:`KQ_NOTE_PDATAMASK` | internal filter flag | 6217db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6227db96d56Sopenharmony_ci | :const:`KQ_NOTE_TRACK` | follow a process across *fork()* | 6237db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6247db96d56Sopenharmony_ci | :const:`KQ_NOTE_CHILD` | returned on the child process for | 6257db96d56Sopenharmony_ci | | *NOTE_TRACK* | 6267db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6277db96d56Sopenharmony_ci | :const:`KQ_NOTE_TRACKERR` | unable to attach to a child | 6287db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6297db96d56Sopenharmony_ci 6307db96d56Sopenharmony_ci :const:`KQ_FILTER_NETDEV` filter flags (not available on macOS): 6317db96d56Sopenharmony_ci 6327db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6337db96d56Sopenharmony_ci | Constant | Meaning | 6347db96d56Sopenharmony_ci +============================+============================================+ 6357db96d56Sopenharmony_ci | :const:`KQ_NOTE_LINKUP` | link is up | 6367db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6377db96d56Sopenharmony_ci | :const:`KQ_NOTE_LINKDOWN` | link is down | 6387db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6397db96d56Sopenharmony_ci | :const:`KQ_NOTE_LINKINV` | link state is invalid | 6407db96d56Sopenharmony_ci +----------------------------+--------------------------------------------+ 6417db96d56Sopenharmony_ci 6427db96d56Sopenharmony_ci 6437db96d56Sopenharmony_ci.. attribute:: kevent.data 6447db96d56Sopenharmony_ci 6457db96d56Sopenharmony_ci Filter specific data. 6467db96d56Sopenharmony_ci 6477db96d56Sopenharmony_ci 6487db96d56Sopenharmony_ci.. attribute:: kevent.udata 6497db96d56Sopenharmony_ci 6507db96d56Sopenharmony_ci User defined value. 651