[issue19017] selectors: towards uniform EBADF handling
STINNER Victor
report at bugs.python.org
Wed Feb 4 17:41:18 CET 2015
STINNER Victor added the comment:
> To find an invalid FD when select() fails with EBAD, we can use something like:
> http://ufwi.org/projects/nufw/repository/revisions/b4f66edc5d4dc837f75857f8bffe9015454fdebc/entry/src/nuauth/tls_nufw.c#L408
Oh, the link is dead. Copy/paste of the code:
---
/* errno == EBADF */
int i;
/* A client disconnects between FD_SET and select.
* Will try to find it */
for (i=0; i<context->mx; ++i){
struct stat s;
if (FD_ISSET(i, &context->tls_rx_set)){
if (fstat(i, &s)<0) {
log_message(CRITICAL, DEBUG_AREA_USER,
"Warning: %d is a bad file descriptor.", i);
FD_CLR(i, &context->tls_rx_set);
}
}
}
continue; /* retry select */
---
In short: call fstat() if check if the FD is valid or not. O(n) complexity.
----------
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue19017>
_______________________________________
More information about the Python-bugs-list
mailing list