summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Modules/selectmodule.c
diff options
context:
space:
mode:
authorshadchin <[email protected]>2022-02-10 16:44:39 +0300
committerDaniil Cherednik <[email protected]>2022-02-10 16:44:39 +0300
commite9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (patch)
tree64175d5cadab313b3e7039ebaa06c5bc3295e274 /contrib/tools/python3/src/Modules/selectmodule.c
parent2598ef1d0aee359b4b6d5fdd1758916d5907d04f (diff)
Restoring authorship annotation for <[email protected]>. Commit 2 of 2.
Diffstat (limited to 'contrib/tools/python3/src/Modules/selectmodule.c')
-rw-r--r--contrib/tools/python3/src/Modules/selectmodule.c1478
1 files changed, 739 insertions, 739 deletions
diff --git a/contrib/tools/python3/src/Modules/selectmodule.c b/contrib/tools/python3/src/Modules/selectmodule.c
index e929daaa799..fb71e9196f3 100644
--- a/contrib/tools/python3/src/Modules/selectmodule.c
+++ b/contrib/tools/python3/src/Modules/selectmodule.c
@@ -9,7 +9,7 @@
#endif
#include "Python.h"
-#include "structmember.h" // PyMemberDef
+#include "structmember.h" // PyMemberDef
#ifdef HAVE_SYS_DEVPOLL_H
#include <sys/resource.h>
@@ -58,55 +58,55 @@ extern void bzero(void *, int);
# define SOCKET int
#endif
-typedef struct {
- PyObject *close;
- PyTypeObject *poll_Type;
- PyTypeObject *devpoll_Type;
- PyTypeObject *pyEpoll_Type;
- PyTypeObject *kqueue_event_Type;
- PyTypeObject *kqueue_queue_Type;
-} _selectstate;
-
-static struct PyModuleDef selectmodule;
-
-static inline _selectstate*
-get_select_state(PyObject *module)
-{
- void *state = PyModule_GetState(module);
- assert(state != NULL);
- return (_selectstate *)state;
-}
-
-#define _selectstate_global get_select_state(PyState_FindModule(&selectmodule))
-
-/*[clinic input]
-module select
-class select.poll "pollObject *" "&poll_Type"
-class select.devpoll "devpollObject *" "&devpoll_Type"
-class select.epoll "pyEpoll_Object *" "&pyEpoll_Type"
-class select.kqueue "kqueue_queue_Object *" "_selectstate_global->kqueue_queue_Type"
-[clinic start generated code]*/
-/*[clinic end generated code: output=da39a3ee5e6b4b0d input=41071028e0ede093]*/
-
-static int
-fildes_converter(PyObject *o, void *p)
-{
- int fd;
- int *pointer = (int *)p;
- fd = PyObject_AsFileDescriptor(o);
- if (fd == -1)
- return 0;
- *pointer = fd;
- return 1;
-}
-
-/*[python input]
-class fildes_converter(CConverter):
- type = 'int'
- converter = 'fildes_converter'
-[python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=ca54eb5aa476e20a]*/
-
+typedef struct {
+ PyObject *close;
+ PyTypeObject *poll_Type;
+ PyTypeObject *devpoll_Type;
+ PyTypeObject *pyEpoll_Type;
+ PyTypeObject *kqueue_event_Type;
+ PyTypeObject *kqueue_queue_Type;
+} _selectstate;
+
+static struct PyModuleDef selectmodule;
+
+static inline _selectstate*
+get_select_state(PyObject *module)
+{
+ void *state = PyModule_GetState(module);
+ assert(state != NULL);
+ return (_selectstate *)state;
+}
+
+#define _selectstate_global get_select_state(PyState_FindModule(&selectmodule))
+
+/*[clinic input]
+module select
+class select.poll "pollObject *" "&poll_Type"
+class select.devpoll "devpollObject *" "&devpoll_Type"
+class select.epoll "pyEpoll_Object *" "&pyEpoll_Type"
+class select.kqueue "kqueue_queue_Object *" "_selectstate_global->kqueue_queue_Type"
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=41071028e0ede093]*/
+
+static int
+fildes_converter(PyObject *o, void *p)
+{
+ int fd;
+ int *pointer = (int *)p;
+ fd = PyObject_AsFileDescriptor(o);
+ if (fd == -1)
+ return 0;
+ *pointer = fd;
+ return 1;
+}
+
+/*[python input]
+class fildes_converter(CConverter):
+ type = 'int'
+ converter = 'fildes_converter'
+[python start generated code]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=ca54eb5aa476e20a]*/
+
/* list of Python objects and their file descriptor */
typedef struct {
PyObject *obj; /* owned reference */
@@ -228,43 +228,43 @@ set2list(fd_set *set, pylist fd2obj[FD_SETSIZE + 1])
#define SELECT_USES_HEAP
#endif /* FD_SETSIZE > 1024 */
-/*[clinic input]
-select.select
-
- rlist: object
- wlist: object
- xlist: object
- timeout as timeout_obj: object = None
- /
-
-Wait until one or more file descriptors are ready for some kind of I/O.
-
-The first three arguments are iterables of file descriptors to be waited for:
-rlist -- wait until ready for reading
-wlist -- wait until ready for writing
-xlist -- wait for an "exceptional condition"
-If only one kind of condition is required, pass [] for the other lists.
-
-A file descriptor is either a socket or file object, or a small integer
-gotten from a fileno() method call on one of those.
-
-The optional 4th argument specifies a timeout in seconds; it may be
-a floating point number to specify fractions of seconds. If it is absent
-or None, the call will never time out.
-
-The return value is a tuple of three lists corresponding to the first three
-arguments; each contains the subset of the corresponding file descriptors
-that are ready.
-
-*** IMPORTANT NOTICE ***
-On Windows, only sockets are supported; on Unix, all file
-descriptors can be used.
-[clinic start generated code]*/
-
+/*[clinic input]
+select.select
+
+ rlist: object
+ wlist: object
+ xlist: object
+ timeout as timeout_obj: object = None
+ /
+
+Wait until one or more file descriptors are ready for some kind of I/O.
+
+The first three arguments are iterables of file descriptors to be waited for:
+rlist -- wait until ready for reading
+wlist -- wait until ready for writing
+xlist -- wait for an "exceptional condition"
+If only one kind of condition is required, pass [] for the other lists.
+
+A file descriptor is either a socket or file object, or a small integer
+gotten from a fileno() method call on one of those.
+
+The optional 4th argument specifies a timeout in seconds; it may be
+a floating point number to specify fractions of seconds. If it is absent
+or None, the call will never time out.
+
+The return value is a tuple of three lists corresponding to the first three
+arguments; each contains the subset of the corresponding file descriptors
+that are ready.
+
+*** IMPORTANT NOTICE ***
+On Windows, only sockets are supported; on Unix, all file
+descriptors can be used.
+[clinic start generated code]*/
+
static PyObject *
-select_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist,
- PyObject *xlist, PyObject *timeout_obj)
-/*[clinic end generated code: output=2b3cfa824f7ae4cf input=e467f5d68033de00]*/
+select_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist,
+ PyObject *xlist, PyObject *timeout_obj)
+/*[clinic end generated code: output=2b3cfa824f7ae4cf input=e467f5d68033de00]*/
{
#ifdef SELECT_USES_HEAP
pylist *rfd2obj, *wfd2obj, *efd2obj;
@@ -320,17 +320,17 @@ select_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist,
}
#endif /* SELECT_USES_HEAP */
- /* Convert iterables to fd_sets, and get maximum fd number
+ /* Convert iterables to fd_sets, and get maximum fd number
* propagates the Python exception set in seq2set()
*/
rfd2obj[0].sentinel = -1;
wfd2obj[0].sentinel = -1;
efd2obj[0].sentinel = -1;
- if ((imax = seq2set(rlist, &ifdset, rfd2obj)) < 0)
+ if ((imax = seq2set(rlist, &ifdset, rfd2obj)) < 0)
goto finally;
- if ((omax = seq2set(wlist, &ofdset, wfd2obj)) < 0)
+ if ((omax = seq2set(wlist, &ofdset, wfd2obj)) < 0)
goto finally;
- if ((emax = seq2set(xlist, &efdset, efd2obj)) < 0)
+ if ((emax = seq2set(xlist, &efdset, efd2obj)) < 0)
goto finally;
max = imax;
@@ -382,17 +382,17 @@ select_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist,
convenient to test for this after all three calls... but
is that acceptable?
*/
- rlist = set2list(&ifdset, rfd2obj);
- wlist = set2list(&ofdset, wfd2obj);
- xlist = set2list(&efdset, efd2obj);
+ rlist = set2list(&ifdset, rfd2obj);
+ wlist = set2list(&ofdset, wfd2obj);
+ xlist = set2list(&efdset, efd2obj);
if (PyErr_Occurred())
ret = NULL;
else
- ret = PyTuple_Pack(3, rlist, wlist, xlist);
+ ret = PyTuple_Pack(3, rlist, wlist, xlist);
- Py_XDECREF(rlist);
- Py_XDECREF(wlist);
- Py_XDECREF(xlist);
+ Py_XDECREF(rlist);
+ Py_XDECREF(wlist);
+ Py_XDECREF(xlist);
}
finally:
@@ -453,23 +453,23 @@ update_ufd_array(pollObject *self)
return 1;
}
-/*[clinic input]
-select.poll.register
+/*[clinic input]
+select.poll.register
- fd: fildes
- either an integer, or an object with a fileno() method returning an int
- eventmask: unsigned_short(c_default="POLLIN | POLLPRI | POLLOUT") = select.POLLIN | select.POLLPRI | select.POLLOUT
- an optional bitmask describing the type of events to check for
- /
+ fd: fildes
+ either an integer, or an object with a fileno() method returning an int
+ eventmask: unsigned_short(c_default="POLLIN | POLLPRI | POLLOUT") = select.POLLIN | select.POLLPRI | select.POLLOUT
+ an optional bitmask describing the type of events to check for
+ /
-Register a file descriptor with the polling object.
-[clinic start generated code]*/
+Register a file descriptor with the polling object.
+[clinic start generated code]*/
static PyObject *
-select_poll_register_impl(pollObject *self, int fd, unsigned short eventmask)
-/*[clinic end generated code: output=0dc7173c800a4a65 input=34e16cfb28d3c900]*/
+select_poll_register_impl(pollObject *self, int fd, unsigned short eventmask)
+/*[clinic end generated code: output=0dc7173c800a4a65 input=34e16cfb28d3c900]*/
{
- PyObject *key, *value;
+ PyObject *key, *value;
int err;
/* Add entry to the internal dictionary: the key is the
@@ -477,7 +477,7 @@ select_poll_register_impl(pollObject *self, int fd, unsigned short eventmask)
key = PyLong_FromLong(fd);
if (key == NULL)
return NULL;
- value = PyLong_FromLong(eventmask);
+ value = PyLong_FromLong(eventmask);
if (value == NULL) {
Py_DECREF(key);
return NULL;
@@ -494,39 +494,39 @@ select_poll_register_impl(pollObject *self, int fd, unsigned short eventmask)
}
-/*[clinic input]
-select.poll.modify
-
- fd: fildes
- either an integer, or an object with a fileno() method returning
- an int
- eventmask: unsigned_short
- a bitmask describing the type of events to check for
- /
-
-Modify an already registered file descriptor.
-[clinic start generated code]*/
-
+/*[clinic input]
+select.poll.modify
+
+ fd: fildes
+ either an integer, or an object with a fileno() method returning
+ an int
+ eventmask: unsigned_short
+ a bitmask describing the type of events to check for
+ /
+
+Modify an already registered file descriptor.
+[clinic start generated code]*/
+
static PyObject *
-select_poll_modify_impl(pollObject *self, int fd, unsigned short eventmask)
-/*[clinic end generated code: output=1a7b88bf079eff17 input=a8e383df075c32cf]*/
+select_poll_modify_impl(pollObject *self, int fd, unsigned short eventmask)
+/*[clinic end generated code: output=1a7b88bf079eff17 input=a8e383df075c32cf]*/
{
- PyObject *key, *value;
+ PyObject *key, *value;
int err;
/* Modify registered fd */
key = PyLong_FromLong(fd);
if (key == NULL)
return NULL;
- if (PyDict_GetItemWithError(self->dict, key) == NULL) {
- if (!PyErr_Occurred()) {
- errno = ENOENT;
- PyErr_SetFromErrno(PyExc_OSError);
- }
+ if (PyDict_GetItemWithError(self->dict, key) == NULL) {
+ if (!PyErr_Occurred()) {
+ errno = ENOENT;
+ PyErr_SetFromErrno(PyExc_OSError);
+ }
Py_DECREF(key);
return NULL;
}
- value = PyLong_FromLong(eventmask);
+ value = PyLong_FromLong(eventmask);
if (value == NULL) {
Py_DECREF(key);
return NULL;
@@ -543,18 +543,18 @@ select_poll_modify_impl(pollObject *self, int fd, unsigned short eventmask)
}
-/*[clinic input]
-select.poll.unregister
+/*[clinic input]
+select.poll.unregister
+
+ fd: fildes
+ /
+
+Remove a file descriptor being tracked by the polling object.
+[clinic start generated code]*/
- fd: fildes
- /
-
-Remove a file descriptor being tracked by the polling object.
-[clinic start generated code]*/
-
static PyObject *
-select_poll_unregister_impl(pollObject *self, int fd)
-/*[clinic end generated code: output=8c9f42e75e7d291b input=4b4fccc1040e79cb]*/
+select_poll_unregister_impl(pollObject *self, int fd)
+/*[clinic end generated code: output=8c9f42e75e7d291b input=4b4fccc1040e79cb]*/
{
PyObject *key;
@@ -576,29 +576,29 @@ select_poll_unregister_impl(pollObject *self, int fd)
Py_RETURN_NONE;
}
-/*[clinic input]
-select.poll.poll
+/*[clinic input]
+select.poll.poll
+
+ timeout as timeout_obj: object = None
+ /
+
+Polls the set of registered file descriptors.
+
+Returns a list containing any descriptors that have events or errors to
+report, as a list of (fd, event) 2-tuples.
+[clinic start generated code]*/
- timeout as timeout_obj: object = None
- /
-
-Polls the set of registered file descriptors.
-
-Returns a list containing any descriptors that have events or errors to
-report, as a list of (fd, event) 2-tuples.
-[clinic start generated code]*/
-
static PyObject *
-select_poll_poll_impl(pollObject *self, PyObject *timeout_obj)
-/*[clinic end generated code: output=876e837d193ed7e4 input=7a446ed45189e894]*/
+select_poll_poll_impl(pollObject *self, PyObject *timeout_obj)
+/*[clinic end generated code: output=876e837d193ed7e4 input=7a446ed45189e894]*/
{
- PyObject *result_list = NULL;
+ PyObject *result_list = NULL;
int poll_result, i, j;
PyObject *value = NULL, *num = NULL;
_PyTime_t timeout = -1, ms = -1, deadline = 0;
int async_err = 0;
- if (timeout_obj != Py_None) {
+ if (timeout_obj != Py_None) {
if (_PyTime_FromMillisecondsObject(&timeout, timeout_obj,
_PyTime_ROUND_TIMEOUT) < 0) {
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
@@ -728,7 +728,7 @@ static pollObject *
newPollObject(void)
{
pollObject *self;
- self = PyObject_New(pollObject, _selectstate_global->poll_Type);
+ self = PyObject_New(pollObject, _selectstate_global->poll_Type);
if (self == NULL)
return NULL;
/* ufd_uptodate is a Boolean, denoting whether the
@@ -744,28 +744,28 @@ newPollObject(void)
return self;
}
-static PyObject *
-poll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
-{
- PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type));
- return NULL;
-}
-
+static PyObject *
+poll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+ PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type));
+ return NULL;
+}
+
static void
poll_dealloc(pollObject *self)
{
- PyObject* type = (PyObject *)Py_TYPE(self);
+ PyObject* type = (PyObject *)Py_TYPE(self);
if (self->ufds != NULL)
PyMem_DEL(self->ufds);
Py_XDECREF(self->dict);
PyObject_Del(self);
- Py_DECREF(type);
+ Py_DECREF(type);
}
#ifdef HAVE_SYS_DEVPOLL_H
-static PyMethodDef devpoll_methods[];
-
+static PyMethodDef devpoll_methods[];
+
typedef struct {
PyObject_HEAD
int fd_devpoll;
@@ -812,8 +812,8 @@ static int devpoll_flush(devpollObject *self)
}
static PyObject *
-internal_devpoll_register(devpollObject *self, int fd,
- unsigned short events, int remove)
+internal_devpoll_register(devpollObject *self, int fd,
+ unsigned short events, int remove)
{
if (self->fd_devpoll < 0)
return devpoll_err_closed();
@@ -839,60 +839,60 @@ internal_devpoll_register(devpollObject *self, int fd,
Py_RETURN_NONE;
}
-/*[clinic input]
-select.devpoll.register
+/*[clinic input]
+select.devpoll.register
+
+ fd: fildes
+ either an integer, or an object with a fileno() method returning
+ an int
+ eventmask: unsigned_short(c_default="POLLIN | POLLPRI | POLLOUT") = select.POLLIN | select.POLLPRI | select.POLLOUT
+ an optional bitmask describing the type of events to check for
+ /
+
+Register a file descriptor with the polling object.
+[clinic start generated code]*/
- fd: fildes
- either an integer, or an object with a fileno() method returning
- an int
- eventmask: unsigned_short(c_default="POLLIN | POLLPRI | POLLOUT") = select.POLLIN | select.POLLPRI | select.POLLOUT
- an optional bitmask describing the type of events to check for
- /
-
-Register a file descriptor with the polling object.
-[clinic start generated code]*/
-
static PyObject *
-select_devpoll_register_impl(devpollObject *self, int fd,
- unsigned short eventmask)
-/*[clinic end generated code: output=6e07fe8b74abba0c input=22006fabe9567522]*/
+select_devpoll_register_impl(devpollObject *self, int fd,
+ unsigned short eventmask)
+/*[clinic end generated code: output=6e07fe8b74abba0c input=22006fabe9567522]*/
{
- return internal_devpoll_register(self, fd, eventmask, 0);
+ return internal_devpoll_register(self, fd, eventmask, 0);
}
-/*[clinic input]
-select.devpoll.modify
+/*[clinic input]
+select.devpoll.modify
+
+ fd: fildes
+ either an integer, or an object with a fileno() method returning
+ an int
+ eventmask: unsigned_short(c_default="POLLIN | POLLPRI | POLLOUT") = select.POLLIN | select.POLLPRI | select.POLLOUT
+ an optional bitmask describing the type of events to check for
+ /
+
+Modify a possible already registered file descriptor.
+[clinic start generated code]*/
- fd: fildes
- either an integer, or an object with a fileno() method returning
- an int
- eventmask: unsigned_short(c_default="POLLIN | POLLPRI | POLLOUT") = select.POLLIN | select.POLLPRI | select.POLLOUT
- an optional bitmask describing the type of events to check for
- /
-
-Modify a possible already registered file descriptor.
-[clinic start generated code]*/
-
static PyObject *
-select_devpoll_modify_impl(devpollObject *self, int fd,
- unsigned short eventmask)
-/*[clinic end generated code: output=bc2e6d23aaff98b4 input=09fa335db7cdc09e]*/
+select_devpoll_modify_impl(devpollObject *self, int fd,
+ unsigned short eventmask)
+/*[clinic end generated code: output=bc2e6d23aaff98b4 input=09fa335db7cdc09e]*/
{
- return internal_devpoll_register(self, fd, eventmask, 1);
+ return internal_devpoll_register(self, fd, eventmask, 1);
}
-/*[clinic input]
-select.devpoll.unregister
+/*[clinic input]
+select.devpoll.unregister
- fd: fildes
- /
+ fd: fildes
+ /
+
+Remove a file descriptor being tracked by the polling object.
+[clinic start generated code]*/
-Remove a file descriptor being tracked by the polling object.
-[clinic start generated code]*/
-
static PyObject *
-select_devpoll_unregister_impl(devpollObject *self, int fd)
-/*[clinic end generated code: output=95519ffa0c7d43fe input=b4ea42a4442fd467]*/
+select_devpoll_unregister_impl(devpollObject *self, int fd)
+/*[clinic end generated code: output=95519ffa0c7d43fe input=b4ea42a4442fd467]*/
{
if (self->fd_devpoll < 0)
return devpoll_err_closed();
@@ -908,23 +908,23 @@ select_devpoll_unregister_impl(devpollObject *self, int fd)
Py_RETURN_NONE;
}
-/*[clinic input]
-select.devpoll.poll
- timeout as timeout_obj: object = None
- /
+/*[clinic input]
+select.devpoll.poll
+ timeout as timeout_obj: object = None
+ /
+
+Polls the set of registered file descriptors.
+
+Returns a list containing any descriptors that have events or errors to
+report, as a list of (fd, event) 2-tuples.
+[clinic start generated code]*/
-Polls the set of registered file descriptors.
-
-Returns a list containing any descriptors that have events or errors to
-report, as a list of (fd, event) 2-tuples.
-[clinic start generated code]*/
-
static PyObject *
-select_devpoll_poll_impl(devpollObject *self, PyObject *timeout_obj)
-/*[clinic end generated code: output=2654e5457cca0b3c input=fd0db698d84f0333]*/
+select_devpoll_poll_impl(devpollObject *self, PyObject *timeout_obj)
+/*[clinic end generated code: output=2654e5457cca0b3c input=fd0db698d84f0333]*/
{
struct dvpoll dvp;
- PyObject *result_list = NULL;
+ PyObject *result_list = NULL;
int poll_result, i;
PyObject *value, *num1, *num2;
_PyTime_t timeout, ms, deadline = 0;
@@ -933,7 +933,7 @@ select_devpoll_poll_impl(devpollObject *self, PyObject *timeout_obj)
return devpoll_err_closed();
/* Check values for timeout */
- if (timeout_obj == Py_None) {
+ if (timeout_obj == Py_None) {
timeout = -1;
ms = -1;
}
@@ -1038,17 +1038,17 @@ devpoll_internal_close(devpollObject *self)
return save_errno;
}
-/*[clinic input]
-select.devpoll.close
-
-Close the devpoll file descriptor.
-
-Further operations on the devpoll object will raise an exception.
-[clinic start generated code]*/
-
-static PyObject *
-select_devpoll_close_impl(devpollObject *self)
-/*[clinic end generated code: output=26b355bd6429f21b input=6273c30f5560a99b]*/
+/*[clinic input]
+select.devpoll.close
+
+Close the devpoll file descriptor.
+
+Further operations on the devpoll object will raise an exception.
+[clinic start generated code]*/
+
+static PyObject *
+select_devpoll_close_impl(devpollObject *self)
+/*[clinic end generated code: output=26b355bd6429f21b input=6273c30f5560a99b]*/
{
errno = devpoll_internal_close(self);
if (errno < 0) {
@@ -1067,15 +1067,15 @@ devpoll_get_closed(devpollObject *self, void *Py_UNUSED(ignored))
Py_RETURN_FALSE;
}
-/*[clinic input]
-select.devpoll.fileno
-
-Return the file descriptor.
-[clinic start generated code]*/
-
-static PyObject *
-select_devpoll_fileno_impl(devpollObject *self)
-/*[clinic end generated code: output=26920929f8d292f4 input=ef15331ebde6c368]*/
+/*[clinic input]
+select.devpoll.fileno
+
+Return the file descriptor.
+[clinic start generated code]*/
+
+static PyObject *
+select_devpoll_fileno_impl(devpollObject *self)
+/*[clinic end generated code: output=26920929f8d292f4 input=ef15331ebde6c368]*/
{
if (self->fd_devpoll < 0)
return devpoll_err_closed();
@@ -1119,7 +1119,7 @@ newDevPollObject(void)
return NULL;
}
- self = PyObject_New(devpollObject, _selectstate_global->devpoll_Type);
+ self = PyObject_New(devpollObject, _selectstate_global->devpoll_Type);
if (self == NULL) {
close(fd_devpoll);
PyMem_DEL(fds);
@@ -1133,72 +1133,72 @@ newDevPollObject(void)
return self;
}
-static PyObject *
-devpoll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
-{
- PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type));
- return NULL;
-}
-
+static PyObject *
+devpoll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+ PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type));
+ return NULL;
+}
+
static void
devpoll_dealloc(devpollObject *self)
{
- PyObject *type = (PyObject *)Py_TYPE(self);
+ PyObject *type = (PyObject *)Py_TYPE(self);
(void)devpoll_internal_close(self);
PyMem_DEL(self->fds);
PyObject_Del(self);
- Py_DECREF(type);
+ Py_DECREF(type);
}
-static PyType_Slot devpoll_Type_slots[] = {
- {Py_tp_dealloc, devpoll_dealloc},
- {Py_tp_getset, devpoll_getsetlist},
- {Py_tp_methods, devpoll_methods},
- {Py_tp_new, devpoll_new},
- {0, 0},
-};
-
-static PyType_Spec devpoll_Type_spec = {
- "select.devpoll",
- sizeof(devpollObject),
- 0,
- Py_TPFLAGS_DEFAULT,
- devpoll_Type_slots
-};
-
+static PyType_Slot devpoll_Type_slots[] = {
+ {Py_tp_dealloc, devpoll_dealloc},
+ {Py_tp_getset, devpoll_getsetlist},
+ {Py_tp_methods, devpoll_methods},
+ {Py_tp_new, devpoll_new},
+ {0, 0},
+};
+
+static PyType_Spec devpoll_Type_spec = {
+ "select.devpoll",
+ sizeof(devpollObject),
+ 0,
+ Py_TPFLAGS_DEFAULT,
+ devpoll_Type_slots
+};
+
#endif /* HAVE_SYS_DEVPOLL_H */
-/*[clinic input]
-select.poll
+/*[clinic input]
+select.poll
+
+Returns a polling object.
-Returns a polling object.
+This object supports registering and unregistering file descriptors, and then
+polling them for I/O events.
+[clinic start generated code]*/
-This object supports registering and unregistering file descriptors, and then
-polling them for I/O events.
-[clinic start generated code]*/
-
static PyObject *
-select_poll_impl(PyObject *module)
-/*[clinic end generated code: output=16a665a4e1d228c5 input=3f877909d5696bbf]*/
+select_poll_impl(PyObject *module)
+/*[clinic end generated code: output=16a665a4e1d228c5 input=3f877909d5696bbf]*/
{
return (PyObject *)newPollObject();
}
#ifdef HAVE_SYS_DEVPOLL_H
-/*[clinic input]
-select.devpoll
-
-Returns a polling object.
-
-This object supports registering and unregistering file descriptors, and then
-polling them for I/O events.
-[clinic start generated code]*/
-
+/*[clinic input]
+select.devpoll
+
+Returns a polling object.
+
+This object supports registering and unregistering file descriptors, and then
+polling them for I/O events.
+[clinic start generated code]*/
+
static PyObject *
-select_devpoll_impl(PyObject *module)
-/*[clinic end generated code: output=ea9213cc87fd9581 input=53a1af94564f00a3]*/
+select_devpoll_impl(PyObject *module)
+/*[clinic end generated code: output=ea9213cc87fd9581 input=53a1af94564f00a3]*/
{
return (PyObject *)newDevPollObject();
}
@@ -1254,7 +1254,7 @@ typedef struct {
SOCKET epfd; /* epoll control file descriptor */
} pyEpoll_Object;
-#define pyepoll_CHECK(op) (PyObject_TypeCheck((op), _selectstate_global->pyEpoll_Type))
+#define pyepoll_CHECK(op) (PyObject_TypeCheck((op), _selectstate_global->pyEpoll_Type))
static PyObject *
pyepoll_err_closed(void)
@@ -1282,10 +1282,10 @@ static PyObject *
newPyEpoll_Object(PyTypeObject *type, int sizehint, SOCKET fd)
{
pyEpoll_Object *self;
- assert(type != NULL);
- allocfunc epoll_alloc = PyType_GetSlot(type, Py_tp_alloc);
- assert(epoll_alloc != NULL);
- self = (pyEpoll_Object *) epoll_alloc(type, 0);
+ assert(type != NULL);
+ allocfunc epoll_alloc = PyType_GetSlot(type, Py_tp_alloc);
+ assert(epoll_alloc != NULL);
+ self = (pyEpoll_Object *) epoll_alloc(type, 0);
if (self == NULL)
return NULL;
@@ -1318,31 +1318,31 @@ newPyEpoll_Object(PyTypeObject *type, int sizehint, SOCKET fd)
}
-/*[clinic input]
-@classmethod
-select.epoll.__new__
-
- sizehint: int = -1
- The expected number of events to be registered. It must be positive,
- or -1 to use the default. It is only used on older systems where
- epoll_create1() is not available; otherwise it has no effect (though its
- value is still checked).
- flags: int = 0
- Deprecated and completely ignored. However, when supplied, its value
- must be 0 or select.EPOLL_CLOEXEC, otherwise OSError is raised.
-
-Returns an epolling object.
-[clinic start generated code]*/
-
+/*[clinic input]
+@classmethod
+select.epoll.__new__
+
+ sizehint: int = -1
+ The expected number of events to be registered. It must be positive,
+ or -1 to use the default. It is only used on older systems where
+ epoll_create1() is not available; otherwise it has no effect (though its
+ value is still checked).
+ flags: int = 0
+ Deprecated and completely ignored. However, when supplied, its value
+ must be 0 or select.EPOLL_CLOEXEC, otherwise OSError is raised.
+
+Returns an epolling object.
+[clinic start generated code]*/
+
static PyObject *
-select_epoll_impl(PyTypeObject *type, int sizehint, int flags)
-/*[clinic end generated code: output=c87404e705013bb5 input=303e3295e7975e43]*/
+select_epoll_impl(PyTypeObject *type, int sizehint, int flags)
+/*[clinic end generated code: output=c87404e705013bb5 input=303e3295e7975e43]*/
{
if (sizehint == -1) {
sizehint = FD_SETSIZE - 1;
}
else if (sizehint <= 0) {
- PyErr_SetString(PyExc_ValueError, "negative sizehint");
+ PyErr_SetString(PyExc_ValueError, "negative sizehint");
return NULL;
}
@@ -1352,7 +1352,7 @@ select_epoll_impl(PyTypeObject *type, int sizehint, int flags)
return NULL;
}
#endif
-
+
return newPyEpoll_Object(type, sizehint, -1);
}
@@ -1360,24 +1360,24 @@ select_epoll_impl(PyTypeObject *type, int sizehint, int flags)
static void
pyepoll_dealloc(pyEpoll_Object *self)
{
- PyTypeObject* type = Py_TYPE(self);
+ PyTypeObject* type = Py_TYPE(self);
(void)pyepoll_internal_close(self);
- freefunc epoll_free = PyType_GetSlot(type, Py_tp_free);
- epoll_free((PyObject *)self);
- Py_DECREF((PyObject *)type);
+ freefunc epoll_free = PyType_GetSlot(type, Py_tp_free);
+ epoll_free((PyObject *)self);
+ Py_DECREF((PyObject *)type);
}
-/*[clinic input]
-select.epoll.close
-
-Close the epoll control file descriptor.
-
-Further operations on the epoll object will raise an exception.
-[clinic start generated code]*/
-
-static PyObject *
-select_epoll_close_impl(pyEpoll_Object *self)
-/*[clinic end generated code: output=ee2144c446a1a435 input=ca6c66ba5a736bfd]*/
+/*[clinic input]
+select.epoll.close
+
+Close the epoll control file descriptor.
+
+Further operations on the epoll object will raise an exception.
+[clinic start generated code]*/
+
+static PyObject *
+select_epoll_close_impl(pyEpoll_Object *self)
+/*[clinic end generated code: output=ee2144c446a1a435 input=ca6c66ba5a736bfd]*/
{
errno = pyepoll_internal_close(self);
if (errno < 0) {
@@ -1397,15 +1397,15 @@ pyepoll_get_closed(pyEpoll_Object *self, void *Py_UNUSED(ignored))
Py_RETURN_FALSE;
}
-/*[clinic input]
-select.epoll.fileno
-
-Return the epoll control file descriptor.
-[clinic start generated code]*/
-
-static PyObject *
-select_epoll_fileno_impl(pyEpoll_Object *self)
-/*[clinic end generated code: output=e171375fdc619ba3 input=c11091a6aee60b5c]*/
+/*[clinic input]
+select.epoll.fileno
+
+Return the epoll control file descriptor.
+[clinic start generated code]*/
+
+static PyObject *
+select_epoll_fileno_impl(pyEpoll_Object *self)
+/*[clinic end generated code: output=e171375fdc619ba3 input=c11091a6aee60b5c]*/
{
if (self->epfd < 0)
return pyepoll_err_closed();
@@ -1413,27 +1413,27 @@ select_epoll_fileno_impl(pyEpoll_Object *self)
}
-/*[clinic input]
-@classmethod
-select.epoll.fromfd
+/*[clinic input]
+@classmethod
+select.epoll.fromfd
+
+ fd: int
+ /
- fd: int
- /
+Create an epoll object from a given control fd.
+[clinic start generated code]*/
-Create an epoll object from a given control fd.
-[clinic start generated code]*/
-
-static PyObject *
-select_epoll_fromfd_impl(PyTypeObject *type, int fd)
-/*[clinic end generated code: output=c15de2a083524e8e input=faecefdb55e3046e]*/
-{
- SOCKET s_fd = (SOCKET)fd;
- return newPyEpoll_Object(type, FD_SETSIZE - 1, s_fd);
+static PyObject *
+select_epoll_fromfd_impl(PyTypeObject *type, int fd)
+/*[clinic end generated code: output=c15de2a083524e8e input=faecefdb55e3046e]*/
+{
+ SOCKET s_fd = (SOCKET)fd;
+ return newPyEpoll_Object(type, FD_SETSIZE - 1, s_fd);
}
static PyObject *
-pyepoll_internal_ctl(int epfd, int op, int fd, unsigned int events)
+pyepoll_internal_ctl(int epfd, int op, int fd, unsigned int events)
{
struct epoll_event ev;
int result;
@@ -1470,91 +1470,91 @@ pyepoll_internal_ctl(int epfd, int op, int fd, unsigned int events)
Py_RETURN_NONE;
}
-/*[clinic input]
-select.epoll.register
-
- fd: fildes
- the target file descriptor of the operation
- eventmask: unsigned_int(c_default="EPOLLIN | EPOLLPRI | EPOLLOUT", bitwise=True) = select.EPOLLIN | select.EPOLLPRI | select.EPOLLOUT
- a bit set composed of the various EPOLL constants
-
-Registers a new fd or raises an OSError if the fd is already registered.
-
-The epoll interface supports all file descriptors that support poll.
-[clinic start generated code]*/
-
+/*[clinic input]
+select.epoll.register
+
+ fd: fildes
+ the target file descriptor of the operation
+ eventmask: unsigned_int(c_default="EPOLLIN | EPOLLPRI | EPOLLOUT", bitwise=True) = select.EPOLLIN | select.EPOLLPRI | select.EPOLLOUT
+ a bit set composed of the various EPOLL constants
+
+Registers a new fd or raises an OSError if the fd is already registered.
+
+The epoll interface supports all file descriptors that support poll.
+[clinic start generated code]*/
+
static PyObject *
-select_epoll_register_impl(pyEpoll_Object *self, int fd,
- unsigned int eventmask)
-/*[clinic end generated code: output=318e5e6386520599 input=a5071b71edfe3578]*/
+select_epoll_register_impl(pyEpoll_Object *self, int fd,
+ unsigned int eventmask)
+/*[clinic end generated code: output=318e5e6386520599 input=a5071b71edfe3578]*/
{
- return pyepoll_internal_ctl(self->epfd, EPOLL_CTL_ADD, fd, eventmask);
-}
+ return pyepoll_internal_ctl(self->epfd, EPOLL_CTL_ADD, fd, eventmask);
+}
-/*[clinic input]
-select.epoll.modify
+/*[clinic input]
+select.epoll.modify
- fd: fildes
- the target file descriptor of the operation
- eventmask: unsigned_int(bitwise=True)
- a bit set composed of the various EPOLL constants
+ fd: fildes
+ the target file descriptor of the operation
+ eventmask: unsigned_int(bitwise=True)
+ a bit set composed of the various EPOLL constants
-Modify event mask for a registered file descriptor.
-[clinic start generated code]*/
+Modify event mask for a registered file descriptor.
+[clinic start generated code]*/
static PyObject *
-select_epoll_modify_impl(pyEpoll_Object *self, int fd,
- unsigned int eventmask)
-/*[clinic end generated code: output=7e3447307cff6f65 input=88a83dac53a8c3da]*/
+select_epoll_modify_impl(pyEpoll_Object *self, int fd,
+ unsigned int eventmask)
+/*[clinic end generated code: output=7e3447307cff6f65 input=88a83dac53a8c3da]*/
{
- return pyepoll_internal_ctl(self->epfd, EPOLL_CTL_MOD, fd, eventmask);
-}
+ return pyepoll_internal_ctl(self->epfd, EPOLL_CTL_MOD, fd, eventmask);
+}
-/*[clinic input]
-select.epoll.unregister
+/*[clinic input]
+select.epoll.unregister
- fd: fildes
- the target file descriptor of the operation
+ fd: fildes
+ the target file descriptor of the operation
-Remove a registered file descriptor from the epoll object.
-[clinic start generated code]*/
+Remove a registered file descriptor from the epoll object.
+[clinic start generated code]*/
static PyObject *
-select_epoll_unregister_impl(pyEpoll_Object *self, int fd)
-/*[clinic end generated code: output=07c5dbd612a512d4 input=3093f68d3644743d]*/
+select_epoll_unregister_impl(pyEpoll_Object *self, int fd)
+/*[clinic end generated code: output=07c5dbd612a512d4 input=3093f68d3644743d]*/
{
- return pyepoll_internal_ctl(self->epfd, EPOLL_CTL_DEL, fd, 0);
-}
+ return pyepoll_internal_ctl(self->epfd, EPOLL_CTL_DEL, fd, 0);
+}
-/*[clinic input]
-select.epoll.poll
+/*[clinic input]
+select.epoll.poll
- timeout as timeout_obj: object = None
- the maximum time to wait in seconds (as float);
- a timeout of None or -1 makes poll wait indefinitely
- maxevents: int = -1
- the maximum number of events returned; -1 means no limit
+ timeout as timeout_obj: object = None
+ the maximum time to wait in seconds (as float);
+ a timeout of None or -1 makes poll wait indefinitely
+ maxevents: int = -1
+ the maximum number of events returned; -1 means no limit
-Wait for events on the epoll file descriptor.
+Wait for events on the epoll file descriptor.
+
+Returns a list containing any descriptors that have events to report,
+as a list of (fd, events) 2-tuples.
+[clinic start generated code]*/
-Returns a list containing any descriptors that have events to report,
-as a list of (fd, events) 2-tuples.
-[clinic start generated code]*/
-
static PyObject *
-select_epoll_poll_impl(pyEpoll_Object *self, PyObject *timeout_obj,
- int maxevents)
-/*[clinic end generated code: output=e02d121a20246c6c input=33d34a5ea430fd5b]*/
+select_epoll_poll_impl(pyEpoll_Object *self, PyObject *timeout_obj,
+ int maxevents)
+/*[clinic end generated code: output=e02d121a20246c6c input=33d34a5ea430fd5b]*/
{
int nfds, i;
PyObject *elist = NULL, *etuple = NULL;
struct epoll_event *evs = NULL;
- _PyTime_t timeout = -1, ms = -1, deadline = 0;
+ _PyTime_t timeout = -1, ms = -1, deadline = 0;
if (self->epfd < 0)
return pyepoll_err_closed();
- if (timeout_obj != Py_None) {
+ if (timeout_obj != Py_None) {
/* epoll_wait() has a resolution of 1 millisecond, round towards
infinity to wait at least timeout seconds. */
if (_PyTime_FromSecondsObject(&timeout, timeout_obj,
@@ -1571,20 +1571,20 @@ select_epoll_poll_impl(pyEpoll_Object *self, PyObject *timeout_obj,
PyErr_SetString(PyExc_OverflowError, "timeout is too large");
return NULL;
}
- /* epoll_wait(2) treats all arbitrary negative numbers the same
- for the timeout argument, but -1 is the documented way to block
- indefinitely in the epoll_wait(2) documentation, so we set ms
- to -1 if the value of ms is a negative number.
+ /* epoll_wait(2) treats all arbitrary negative numbers the same
+ for the timeout argument, but -1 is the documented way to block
+ indefinitely in the epoll_wait(2) documentation, so we set ms
+ to -1 if the value of ms is a negative number.
+
+ Note that we didn't use INFTIM here since it's non-standard and
+ isn't available under Linux. */
+ if (ms < 0) {
+ ms = -1;
+ }
- Note that we didn't use INFTIM here since it's non-standard and
- isn't available under Linux. */
- if (ms < 0) {
- ms = -1;
- }
-
- if (timeout >= 0) {
- deadline = _PyTime_GetMonotonicClock() + timeout;
- }
+ if (timeout >= 0) {
+ deadline = _PyTime_GetMonotonicClock() + timeout;
+ }
}
if (maxevents == -1) {
@@ -1652,14 +1652,14 @@ select_epoll_poll_impl(pyEpoll_Object *self, PyObject *timeout_obj,
}
-/*[clinic input]
-select.epoll.__enter__
-
-[clinic start generated code]*/
-
+/*[clinic input]
+select.epoll.__enter__
+
+[clinic start generated code]*/
+
static PyObject *
-select_epoll___enter___impl(pyEpoll_Object *self)
-/*[clinic end generated code: output=ab45d433504db2a0 input=3c22568587efeadb]*/
+select_epoll___enter___impl(pyEpoll_Object *self)
+/*[clinic end generated code: output=ab45d433504db2a0 input=3c22568587efeadb]*/
{
if (self->epfd < 0)
return pyepoll_err_closed();
@@ -1668,22 +1668,22 @@ select_epoll___enter___impl(pyEpoll_Object *self)
return (PyObject *)self;
}
-/*[clinic input]
-select.epoll.__exit__
-
- exc_type: object = None
- exc_value: object = None
- exc_tb: object = None
- /
-
-[clinic start generated code]*/
-
+/*[clinic input]
+select.epoll.__exit__
+
+ exc_type: object = None
+ exc_value: object = None
+ exc_tb: object = None
+ /
+
+[clinic start generated code]*/
+
static PyObject *
-select_epoll___exit___impl(pyEpoll_Object *self, PyObject *exc_type,
- PyObject *exc_value, PyObject *exc_tb)
-/*[clinic end generated code: output=c480f38ce361748e input=7ae81a5a4c1a98d8]*/
+select_epoll___exit___impl(pyEpoll_Object *self, PyObject *exc_type,
+ PyObject *exc_value, PyObject *exc_tb)
+/*[clinic end generated code: output=c480f38ce361748e input=7ae81a5a4c1a98d8]*/
{
- return PyObject_CallMethodObjArgs((PyObject *)self, _selectstate_global->close, NULL);
+ return PyObject_CallMethodObjArgs((PyObject *)self, _selectstate_global->close, NULL);
}
static PyGetSetDef pyepoll_getsetlist[] = {
@@ -1692,15 +1692,15 @@ static PyGetSetDef pyepoll_getsetlist[] = {
{0},
};
-PyDoc_STRVAR(pyepoll_doc,
-"select.epoll(sizehint=-1, flags=0)\n\
-\n\
-Returns an epolling object\n\
-\n\
-sizehint must be a positive integer or -1 for the default size. The\n\
-sizehint is used to optimize internal data structures. It doesn't limit\n\
-the maximum number of monitored events.");
-
+PyDoc_STRVAR(pyepoll_doc,
+"select.epoll(sizehint=-1, flags=0)\n\
+\n\
+Returns an epolling object\n\
+\n\
+sizehint must be a positive integer or -1 for the default size. The\n\
+sizehint is used to optimize internal data structures. It doesn't limit\n\
+the maximum number of monitored events.");
+
#endif /* HAVE_EPOLL */
#ifdef HAVE_KQUEUE
@@ -1757,14 +1757,14 @@ typedef struct {
struct kevent e;
} kqueue_event_Object;
-#define kqueue_event_Check(op) (PyObject_TypeCheck((op), _selectstate_global->kqueue_event_Type))
+#define kqueue_event_Check(op) (PyObject_TypeCheck((op), _selectstate_global->kqueue_event_Type))
typedef struct {
PyObject_HEAD
SOCKET kqfd; /* kqueue control fd */
} kqueue_queue_Object;
-#define kqueue_queue_Check(op) (PyObject_TypeCheck((op), _selectstate_global->kqueue_queue_Type))
+#define kqueue_queue_Check(op) (PyObject_TypeCheck((op), _selectstate_global->kqueue_queue_Type))
#if (SIZEOF_UINTPTR_T != SIZEOF_VOID_P)
# error uintptr_t does not match void *!
@@ -1924,24 +1924,24 @@ kqueue_event_richcompare(kqueue_event_Object *s, kqueue_event_Object *o,
Py_RETURN_RICHCOMPARE(result, 0, op);
}
-static PyType_Slot kqueue_event_Type_slots[] = {
- {Py_tp_doc, (void*)kqueue_event_doc},
- {Py_tp_init, kqueue_event_init},
- {Py_tp_members, kqueue_event_members},
- {Py_tp_new, PyType_GenericNew},
- {Py_tp_repr, kqueue_event_repr},
- {Py_tp_richcompare, kqueue_event_richcompare},
- {0, 0},
-};
-
-static PyType_Spec kqueue_event_Type_spec = {
- "select.kevent",
- sizeof(kqueue_event_Object),
- 0,
- Py_TPFLAGS_DEFAULT,
- kqueue_event_Type_slots
-};
-
+static PyType_Slot kqueue_event_Type_slots[] = {
+ {Py_tp_doc, (void*)kqueue_event_doc},
+ {Py_tp_init, kqueue_event_init},
+ {Py_tp_members, kqueue_event_members},
+ {Py_tp_new, PyType_GenericNew},
+ {Py_tp_repr, kqueue_event_repr},
+ {Py_tp_richcompare, kqueue_event_richcompare},
+ {0, 0},
+};
+
+static PyType_Spec kqueue_event_Type_spec = {
+ "select.kevent",
+ sizeof(kqueue_event_Object),
+ 0,
+ Py_TPFLAGS_DEFAULT,
+ kqueue_event_Type_slots
+};
+
static PyObject *
kqueue_queue_err_closed(void)
{
@@ -1968,10 +1968,10 @@ static PyObject *
newKqueue_Object(PyTypeObject *type, SOCKET fd)
{
kqueue_queue_Object *self;
- assert(type != NULL);
- allocfunc queue_alloc = PyType_GetSlot(type, Py_tp_alloc);
- assert(queue_alloc != NULL);
- self = (kqueue_queue_Object *) queue_alloc(type, 0);
+ assert(type != NULL);
+ allocfunc queue_alloc = PyType_GetSlot(type, Py_tp_alloc);
+ assert(queue_alloc != NULL);
+ self = (kqueue_queue_Object *) queue_alloc(type, 0);
if (self == NULL) {
return NULL;
}
@@ -1999,28 +1999,28 @@ newKqueue_Object(PyTypeObject *type, SOCKET fd)
return (PyObject *)self;
}
-/*[clinic input]
-@classmethod
-select.kqueue.__new__
-
-Kqueue syscall wrapper.
-
-For example, to start watching a socket for input:
->>> kq = kqueue()
->>> sock = socket()
->>> sock.connect((host, port))
->>> kq.control([kevent(sock, KQ_FILTER_WRITE, KQ_EV_ADD)], 0)
-
-To wait one second for it to become writeable:
->>> kq.control(None, 1, 1000)
-
-To stop listening:
->>> kq.control([kevent(sock, KQ_FILTER_WRITE, KQ_EV_DELETE)], 0)
-[clinic start generated code]*/
-
+/*[clinic input]
+@classmethod
+select.kqueue.__new__
+
+Kqueue syscall wrapper.
+
+For example, to start watching a socket for input:
+>>> kq = kqueue()
+>>> sock = socket()
+>>> sock.connect((host, port))
+>>> kq.control([kevent(sock, KQ_FILTER_WRITE, KQ_EV_ADD)], 0)
+
+To wait one second for it to become writeable:
+>>> kq.control(None, 1, 1000)
+
+To stop listening:
+>>> kq.control([kevent(sock, KQ_FILTER_WRITE, KQ_EV_DELETE)], 0)
+[clinic start generated code]*/
+
static PyObject *
-select_kqueue_impl(PyTypeObject *type)
-/*[clinic end generated code: output=e0ff89f154d56236 input=cf625e49218366e8]*/
+select_kqueue_impl(PyTypeObject *type)
+/*[clinic end generated code: output=e0ff89f154d56236 input=cf625e49218366e8]*/
{
return newKqueue_Object(type, -1);
}
@@ -2028,24 +2028,24 @@ select_kqueue_impl(PyTypeObject *type)
static void
kqueue_queue_dealloc(kqueue_queue_Object *self)
{
- PyTypeObject* type = Py_TYPE(self);
+ PyTypeObject* type = Py_TYPE(self);
kqueue_queue_internal_close(self);
- freefunc kqueue_free = PyType_GetSlot(type, Py_tp_free);
- kqueue_free((PyObject *)self);
- Py_DECREF((PyObject *)type);
+ freefunc kqueue_free = PyType_GetSlot(type, Py_tp_free);
+ kqueue_free((PyObject *)self);
+ Py_DECREF((PyObject *)type);
}
-/*[clinic input]
-select.kqueue.close
-
-Close the kqueue control file descriptor.
-
-Further operations on the kqueue object will raise an exception.
-[clinic start generated code]*/
-
-static PyObject *
-select_kqueue_close_impl(kqueue_queue_Object *self)
-/*[clinic end generated code: output=d1c7df0b407a4bc1 input=0b12d95430e0634c]*/
+/*[clinic input]
+select.kqueue.close
+
+Close the kqueue control file descriptor.
+
+Further operations on the kqueue object will raise an exception.
+[clinic start generated code]*/
+
+static PyObject *
+select_kqueue_close_impl(kqueue_queue_Object *self)
+/*[clinic end generated code: output=d1c7df0b407a4bc1 input=0b12d95430e0634c]*/
{
errno = kqueue_queue_internal_close(self);
if (errno < 0) {
@@ -2064,60 +2064,60 @@ kqueue_queue_get_closed(kqueue_queue_Object *self, void *Py_UNUSED(ignored))
Py_RETURN_FALSE;
}
-/*[clinic input]
-select.kqueue.fileno
-
-Return the kqueue control file descriptor.
-[clinic start generated code]*/
-
-static PyObject *
-select_kqueue_fileno_impl(kqueue_queue_Object *self)
-/*[clinic end generated code: output=716f46112a4f6e5c input=41911c539ca2b0ca]*/
+/*[clinic input]
+select.kqueue.fileno
+
+Return the kqueue control file descriptor.
+[clinic start generated code]*/
+
+static PyObject *
+select_kqueue_fileno_impl(kqueue_queue_Object *self)
+/*[clinic end generated code: output=716f46112a4f6e5c input=41911c539ca2b0ca]*/
{
if (self->kqfd < 0)
return kqueue_queue_err_closed();
return PyLong_FromLong(self->kqfd);
}
-/*[clinic input]
-@classmethod
-select.kqueue.fromfd
+/*[clinic input]
+@classmethod
+select.kqueue.fromfd
+
+ fd: int
+ /
- fd: int
- /
-
-Create a kqueue object from a given control fd.
-[clinic start generated code]*/
-
-static PyObject *
-select_kqueue_fromfd_impl(PyTypeObject *type, int fd)
-/*[clinic end generated code: output=d02c3c7dc538a653 input=f6172a48ca4ecdd0]*/
+Create a kqueue object from a given control fd.
+[clinic start generated code]*/
+
+static PyObject *
+select_kqueue_fromfd_impl(PyTypeObject *type, int fd)
+/*[clinic end generated code: output=d02c3c7dc538a653 input=f6172a48ca4ecdd0]*/
{
- SOCKET s_fd = (SOCKET)fd;
+ SOCKET s_fd = (SOCKET)fd;
- return newKqueue_Object(type, s_fd);
+ return newKqueue_Object(type, s_fd);
}
-/*[clinic input]
-select.kqueue.control
+/*[clinic input]
+select.kqueue.control
+
+ changelist: object
+ Must be an iterable of kevent objects describing the changes to be made
+ to the kernel's watch list or None.
+ maxevents: int
+ The maximum number of events that the kernel will return.
+ timeout as otimeout: object = None
+ The maximum time to wait in seconds, or else None to wait forever.
+ This accepts floats for smaller timeouts, too.
+ /
+
+Calls the kernel kevent function.
+[clinic start generated code]*/
- changelist: object
- Must be an iterable of kevent objects describing the changes to be made
- to the kernel's watch list or None.
- maxevents: int
- The maximum number of events that the kernel will return.
- timeout as otimeout: object = None
- The maximum time to wait in seconds, or else None to wait forever.
- This accepts floats for smaller timeouts, too.
- /
-
-Calls the kernel kevent function.
-[clinic start generated code]*/
-
static PyObject *
-select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
- int maxevents, PyObject *otimeout)
-/*[clinic end generated code: output=81324ff5130db7ae input=59c4e30811209c47]*/
+select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
+ int maxevents, PyObject *otimeout)
+/*[clinic end generated code: output=81324ff5130db7ae input=59c4e30811209c47]*/
{
int gotevents = 0;
int nchanges = 0;
@@ -2133,14 +2133,14 @@ select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
if (self->kqfd < 0)
return kqueue_queue_err_closed();
- if (maxevents < 0) {
+ if (maxevents < 0) {
PyErr_Format(PyExc_ValueError,
"Length of eventlist must be 0 or positive, got %d",
- maxevents);
+ maxevents);
return NULL;
}
- if (otimeout == Py_None) {
+ if (otimeout == Py_None) {
ptimeoutspec = NULL;
}
else {
@@ -2149,7 +2149,7 @@ select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
PyErr_Format(PyExc_TypeError,
"timeout argument must be a number "
"or None, got %.200s",
- _PyType_Name(Py_TYPE(otimeout)));
+ _PyType_Name(Py_TYPE(otimeout)));
return NULL;
}
@@ -2164,8 +2164,8 @@ select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
ptimeoutspec = &timeoutspec;
}
- if (changelist != Py_None) {
- seq = PySequence_Fast(changelist, "changelist is not iterable");
+ if (changelist != Py_None) {
+ seq = PySequence_Fast(changelist, "changelist is not iterable");
if (seq == NULL) {
return NULL;
}
@@ -2195,8 +2195,8 @@ select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
}
/* event list */
- if (maxevents) {
- evl = PyMem_New(struct kevent, maxevents);
+ if (maxevents) {
+ evl = PyMem_New(struct kevent, maxevents);
if (evl == NULL) {
PyErr_NoMemory();
goto error;
@@ -2210,7 +2210,7 @@ select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
Py_BEGIN_ALLOW_THREADS
errno = 0;
gotevents = kevent(self->kqfd, chl, nchanges,
- evl, maxevents, ptimeoutspec);
+ evl, maxevents, ptimeoutspec);
Py_END_ALLOW_THREADS
if (errno != EINTR)
@@ -2245,7 +2245,7 @@ select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
for (i = 0; i < gotevents; i++) {
kqueue_event_Object *ch;
- ch = PyObject_New(kqueue_event_Object, _selectstate_global->kqueue_event_Type);
+ ch = PyObject_New(kqueue_event_Object, _selectstate_global->kqueue_event_Type);
if (ch == NULL) {
goto error;
}
@@ -2264,123 +2264,123 @@ select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
return NULL;
}
-static PyGetSetDef kqueue_queue_getsetlist[] = {
- {"closed", (getter)kqueue_queue_get_closed, NULL,
- "True if the kqueue handler is closed"},
- {0},
-};
+static PyGetSetDef kqueue_queue_getsetlist[] = {
+ {"closed", (getter)kqueue_queue_get_closed, NULL,
+ "True if the kqueue handler is closed"},
+ {0},
+};
+
+#endif /* HAVE_KQUEUE */
-#endif /* HAVE_KQUEUE */
-
-/* ************************************************************************ */
-
-#include "clinic/selectmodule.c.h"
-
-#if defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)
-
-static PyMethodDef poll_methods[] = {
- SELECT_POLL_REGISTER_METHODDEF
- SELECT_POLL_MODIFY_METHODDEF
- SELECT_POLL_UNREGISTER_METHODDEF
- SELECT_POLL_POLL_METHODDEF
- {NULL, NULL} /* sentinel */
-};
-
-
-static PyType_Slot poll_Type_slots[] = {
- {Py_tp_dealloc, poll_dealloc},
- {Py_tp_methods, poll_methods},
- {Py_tp_new, poll_new},
- {0, 0},
-};
-
-static PyType_Spec poll_Type_spec = {
- "select.poll",
- sizeof(pollObject),
- 0,
- Py_TPFLAGS_DEFAULT,
- poll_Type_slots
-};
-
-#ifdef HAVE_SYS_DEVPOLL_H
-
-static PyMethodDef devpoll_methods[] = {
- SELECT_DEVPOLL_REGISTER_METHODDEF
- SELECT_DEVPOLL_MODIFY_METHODDEF
- SELECT_DEVPOLL_UNREGISTER_METHODDEF
- SELECT_DEVPOLL_POLL_METHODDEF
- SELECT_DEVPOLL_CLOSE_METHODDEF
- SELECT_DEVPOLL_FILENO_METHODDEF
- {NULL, NULL} /* sentinel */
-};
-
-#endif /* HAVE_SYS_DEVPOLL_H */
-
-#endif /* HAVE_POLL */
-
-#ifdef HAVE_EPOLL
-
-static PyMethodDef pyepoll_methods[] = {
- SELECT_EPOLL_FROMFD_METHODDEF
- SELECT_EPOLL_CLOSE_METHODDEF
- SELECT_EPOLL_FILENO_METHODDEF
- SELECT_EPOLL_MODIFY_METHODDEF
- SELECT_EPOLL_REGISTER_METHODDEF
- SELECT_EPOLL_UNREGISTER_METHODDEF
- SELECT_EPOLL_POLL_METHODDEF
- SELECT_EPOLL___ENTER___METHODDEF
- SELECT_EPOLL___EXIT___METHODDEF
+/* ************************************************************************ */
+
+#include "clinic/selectmodule.c.h"
+
+#if defined(HAVE_POLL) && !defined(HAVE_BROKEN_POLL)
+
+static PyMethodDef poll_methods[] = {
+ SELECT_POLL_REGISTER_METHODDEF
+ SELECT_POLL_MODIFY_METHODDEF
+ SELECT_POLL_UNREGISTER_METHODDEF
+ SELECT_POLL_POLL_METHODDEF
+ {NULL, NULL} /* sentinel */
+};
+
+
+static PyType_Slot poll_Type_slots[] = {
+ {Py_tp_dealloc, poll_dealloc},
+ {Py_tp_methods, poll_methods},
+ {Py_tp_new, poll_new},
+ {0, 0},
+};
+
+static PyType_Spec poll_Type_spec = {
+ "select.poll",
+ sizeof(pollObject),
+ 0,
+ Py_TPFLAGS_DEFAULT,
+ poll_Type_slots
+};
+
+#ifdef HAVE_SYS_DEVPOLL_H
+
+static PyMethodDef devpoll_methods[] = {
+ SELECT_DEVPOLL_REGISTER_METHODDEF
+ SELECT_DEVPOLL_MODIFY_METHODDEF
+ SELECT_DEVPOLL_UNREGISTER_METHODDEF
+ SELECT_DEVPOLL_POLL_METHODDEF
+ SELECT_DEVPOLL_CLOSE_METHODDEF
+ SELECT_DEVPOLL_FILENO_METHODDEF
+ {NULL, NULL} /* sentinel */
+};
+
+#endif /* HAVE_SYS_DEVPOLL_H */
+
+#endif /* HAVE_POLL */
+
+#ifdef HAVE_EPOLL
+
+static PyMethodDef pyepoll_methods[] = {
+ SELECT_EPOLL_FROMFD_METHODDEF
+ SELECT_EPOLL_CLOSE_METHODDEF
+ SELECT_EPOLL_FILENO_METHODDEF
+ SELECT_EPOLL_MODIFY_METHODDEF
+ SELECT_EPOLL_REGISTER_METHODDEF
+ SELECT_EPOLL_UNREGISTER_METHODDEF
+ SELECT_EPOLL_POLL_METHODDEF
+ SELECT_EPOLL___ENTER___METHODDEF
+ SELECT_EPOLL___EXIT___METHODDEF
{NULL, NULL},
};
-static PyType_Slot pyEpoll_Type_slots[] = {
- {Py_tp_dealloc, pyepoll_dealloc},
- {Py_tp_doc, (void*)pyepoll_doc},
- {Py_tp_getattro, PyObject_GenericGetAttr},
- {Py_tp_getset, pyepoll_getsetlist},
- {Py_tp_methods, pyepoll_methods},
- {Py_tp_new, select_epoll},
- {0, 0},
+static PyType_Slot pyEpoll_Type_slots[] = {
+ {Py_tp_dealloc, pyepoll_dealloc},
+ {Py_tp_doc, (void*)pyepoll_doc},
+ {Py_tp_getattro, PyObject_GenericGetAttr},
+ {Py_tp_getset, pyepoll_getsetlist},
+ {Py_tp_methods, pyepoll_methods},
+ {Py_tp_new, select_epoll},
+ {0, 0},
+};
+
+static PyType_Spec pyEpoll_Type_spec = {
+ "select.epoll",
+ sizeof(pyEpoll_Object),
+ 0,
+ Py_TPFLAGS_DEFAULT,
+ pyEpoll_Type_slots
+};
+
+#endif /* HAVE_EPOLL */
+
+#ifdef HAVE_KQUEUE
+
+static PyMethodDef kqueue_queue_methods[] = {
+ SELECT_KQUEUE_FROMFD_METHODDEF
+ SELECT_KQUEUE_CLOSE_METHODDEF
+ SELECT_KQUEUE_FILENO_METHODDEF
+ SELECT_KQUEUE_CONTROL_METHODDEF
+ {NULL, NULL},
};
-static PyType_Spec pyEpoll_Type_spec = {
- "select.epoll",
- sizeof(pyEpoll_Object),
- 0,
- Py_TPFLAGS_DEFAULT,
- pyEpoll_Type_slots
-};
-
-#endif /* HAVE_EPOLL */
+static PyType_Slot kqueue_queue_Type_slots[] = {
+ {Py_tp_dealloc, kqueue_queue_dealloc},
+ {Py_tp_doc, (void*)select_kqueue__doc__},
+ {Py_tp_getset, kqueue_queue_getsetlist},
+ {Py_tp_methods, kqueue_queue_methods},
+ {Py_tp_new, select_kqueue},
+ {0, 0},
+};
-#ifdef HAVE_KQUEUE
-
-static PyMethodDef kqueue_queue_methods[] = {
- SELECT_KQUEUE_FROMFD_METHODDEF
- SELECT_KQUEUE_CLOSE_METHODDEF
- SELECT_KQUEUE_FILENO_METHODDEF
- SELECT_KQUEUE_CONTROL_METHODDEF
- {NULL, NULL},
-};
-
-static PyType_Slot kqueue_queue_Type_slots[] = {
- {Py_tp_dealloc, kqueue_queue_dealloc},
- {Py_tp_doc, (void*)select_kqueue__doc__},
- {Py_tp_getset, kqueue_queue_getsetlist},
- {Py_tp_methods, kqueue_queue_methods},
- {Py_tp_new, select_kqueue},
- {0, 0},
+static PyType_Spec kqueue_queue_Type_spec = {
+ "select.kqueue",
+ sizeof(kqueue_queue_Object),
+ 0,
+ Py_TPFLAGS_DEFAULT,
+ kqueue_queue_Type_slots
};
-static PyType_Spec kqueue_queue_Type_spec = {
- "select.kqueue",
- sizeof(kqueue_queue_Object),
- 0,
- Py_TPFLAGS_DEFAULT,
- kqueue_queue_Type_slots
-};
-
#endif /* HAVE_KQUEUE */
@@ -2391,9 +2391,9 @@ static PyType_Spec kqueue_queue_Type_spec = {
static PyMethodDef select_methods[] = {
- SELECT_SELECT_METHODDEF
- SELECT_POLL_METHODDEF
- SELECT_DEVPOLL_METHODDEF
+ SELECT_SELECT_METHODDEF
+ SELECT_POLL_METHODDEF
+ SELECT_DEVPOLL_METHODDEF
{0, 0}, /* sentinel */
};
@@ -2404,47 +2404,47 @@ PyDoc_STRVAR(module_doc,
On Windows, only sockets are supported; on Unix, all file descriptors.");
-
-static int
-_select_traverse(PyObject *module, visitproc visit, void *arg)
-{
- Py_VISIT(get_select_state(module)->close);
- Py_VISIT(get_select_state(module)->poll_Type);
- Py_VISIT(get_select_state(module)->devpoll_Type);
- Py_VISIT(get_select_state(module)->pyEpoll_Type);
- Py_VISIT(get_select_state(module)->kqueue_event_Type);
- Py_VISIT(get_select_state(module)->kqueue_queue_Type);
- return 0;
-}
-
-static int
-_select_clear(PyObject *module)
-{
- Py_CLEAR(get_select_state(module)->close);
- Py_CLEAR(get_select_state(module)->poll_Type);
- Py_CLEAR(get_select_state(module)->devpoll_Type);
- Py_CLEAR(get_select_state(module)->pyEpoll_Type);
- Py_CLEAR(get_select_state(module)->kqueue_event_Type);
- Py_CLEAR(get_select_state(module)->kqueue_queue_Type);
- return 0;
-}
-
-static void
-_select_free(void *module)
-{
- _select_clear((PyObject *)module);
-}
-
+
+static int
+_select_traverse(PyObject *module, visitproc visit, void *arg)
+{
+ Py_VISIT(get_select_state(module)->close);
+ Py_VISIT(get_select_state(module)->poll_Type);
+ Py_VISIT(get_select_state(module)->devpoll_Type);
+ Py_VISIT(get_select_state(module)->pyEpoll_Type);
+ Py_VISIT(get_select_state(module)->kqueue_event_Type);
+ Py_VISIT(get_select_state(module)->kqueue_queue_Type);
+ return 0;
+}
+
+static int
+_select_clear(PyObject *module)
+{
+ Py_CLEAR(get_select_state(module)->close);
+ Py_CLEAR(get_select_state(module)->poll_Type);
+ Py_CLEAR(get_select_state(module)->devpoll_Type);
+ Py_CLEAR(get_select_state(module)->pyEpoll_Type);
+ Py_CLEAR(get_select_state(module)->kqueue_event_Type);
+ Py_CLEAR(get_select_state(module)->kqueue_queue_Type);
+ return 0;
+}
+
+static void
+_select_free(void *module)
+{
+ _select_clear((PyObject *)module);
+}
+
static struct PyModuleDef selectmodule = {
PyModuleDef_HEAD_INIT,
"select",
module_doc,
- sizeof(_selectstate),
+ sizeof(_selectstate),
select_methods,
NULL,
- _select_traverse,
- _select_clear,
- _select_free,
+ _select_traverse,
+ _select_clear,
+ _select_free,
};
PyMODINIT_FUNC
@@ -2455,8 +2455,8 @@ PyInit_select(void)
if (m == NULL)
return NULL;
- get_select_state(m)->close = PyUnicode_InternFromString("close");
-
+ get_select_state(m)->close = PyUnicode_InternFromString("close");
+
Py_INCREF(PyExc_OSError);
PyModule_AddObject(m, "error", PyExc_OSError);
@@ -2478,12 +2478,12 @@ PyInit_select(void)
#else
{
#endif
- PyObject *poll_Type = PyType_FromSpec(&poll_Type_spec);
- if (poll_Type == NULL)
+ PyObject *poll_Type = PyType_FromSpec(&poll_Type_spec);
+ if (poll_Type == NULL)
return NULL;
- get_select_state(m)->poll_Type = (PyTypeObject *)poll_Type;
- Py_INCREF(poll_Type);
-
+ get_select_state(m)->poll_Type = (PyTypeObject *)poll_Type;
+ Py_INCREF(poll_Type);
+
PyModule_AddIntMacro(m, POLLIN);
PyModule_AddIntMacro(m, POLLPRI);
PyModule_AddIntMacro(m, POLLOUT);
@@ -2514,20 +2514,20 @@ PyInit_select(void)
#endif /* HAVE_POLL */
#ifdef HAVE_SYS_DEVPOLL_H
- PyObject *devpoll_Type = PyType_FromSpec(&devpoll_Type_spec);
- if (devpoll_Type == NULL)
+ PyObject *devpoll_Type = PyType_FromSpec(&devpoll_Type_spec);
+ if (devpoll_Type == NULL)
return NULL;
- get_select_state(m)->devpoll_Type = (PyTypeObject *)devpoll_Type;
- Py_INCREF(devpoll_Type);
+ get_select_state(m)->devpoll_Type = (PyTypeObject *)devpoll_Type;
+ Py_INCREF(devpoll_Type);
#endif
#ifdef HAVE_EPOLL
- PyObject *pyEpoll_Type = PyType_FromSpec(&pyEpoll_Type_spec);
- if (pyEpoll_Type == NULL)
+ PyObject *pyEpoll_Type = PyType_FromSpec(&pyEpoll_Type_spec);
+ if (pyEpoll_Type == NULL)
return NULL;
- get_select_state(m)->pyEpoll_Type = (PyTypeObject *)pyEpoll_Type;
- Py_INCREF(pyEpoll_Type);
- PyModule_AddObject(m, "epoll", (PyObject *)get_select_state(m)->pyEpoll_Type);
+ get_select_state(m)->pyEpoll_Type = (PyTypeObject *)pyEpoll_Type;
+ Py_INCREF(pyEpoll_Type);
+ PyModule_AddObject(m, "epoll", (PyObject *)get_select_state(m)->pyEpoll_Type);
PyModule_AddIntMacro(m, EPOLLIN);
PyModule_AddIntMacro(m, EPOLLOUT);
@@ -2569,19 +2569,19 @@ PyInit_select(void)
#endif /* HAVE_EPOLL */
#ifdef HAVE_KQUEUE
- PyObject *kqueue_event_Type = PyType_FromSpec(&kqueue_event_Type_spec);
- if (kqueue_event_Type == NULL)
+ PyObject *kqueue_event_Type = PyType_FromSpec(&kqueue_event_Type_spec);
+ if (kqueue_event_Type == NULL)
return NULL;
- get_select_state(m)->kqueue_event_Type = (PyTypeObject *)kqueue_event_Type;
- Py_INCREF(get_select_state(m)->kqueue_event_Type);
- PyModule_AddObject(m, "kevent", kqueue_event_Type);
+ get_select_state(m)->kqueue_event_Type = (PyTypeObject *)kqueue_event_Type;
+ Py_INCREF(get_select_state(m)->kqueue_event_Type);
+ PyModule_AddObject(m, "kevent", kqueue_event_Type);
- PyObject *kqueue_queue_Type = PyType_FromSpec(&kqueue_queue_Type_spec);
- if (kqueue_queue_Type == NULL)
+ PyObject *kqueue_queue_Type = PyType_FromSpec(&kqueue_queue_Type_spec);
+ if (kqueue_queue_Type == NULL)
return NULL;
- get_select_state(m)->kqueue_queue_Type = (PyTypeObject *)kqueue_queue_Type;
- Py_INCREF(get_select_state(m)->kqueue_queue_Type);
- PyModule_AddObject(m, "kqueue", kqueue_queue_Type);
+ get_select_state(m)->kqueue_queue_Type = (PyTypeObject *)kqueue_queue_Type;
+ Py_INCREF(get_select_state(m)->kqueue_queue_Type);
+ PyModule_AddObject(m, "kqueue", kqueue_queue_Type);
/* event filters */
PyModule_AddIntConstant(m, "KQ_FILTER_READ", EVFILT_READ);