SF patch 555085 (timeout socket implementation) by Michael Gilfix.

I've made considerable changes to Michael's code, specifically to use
the select() system call directly and to store the timeout as a C
double instead of a Python object; internally, -1.0 (or anything
negative) represents the None from the API.

I'm not 100% sure that all corner cases are covered correctly, so
please keep an eye on this.  Next I'm going to try it Windows before
Tim complains.

No way is this a bugfix candidate. :-)
This commit is contained in:
Guido van Rossum 2002-06-06 21:51:01 +00:00
parent 15699055e9
commit be946bfea7
1 changed files with 23 additions and 0 deletions

View File

@ -514,6 +514,29 @@ all sockets are in blocking mode. In non-blocking mode, if a
block until they can proceed. block until they can proceed.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[socket]{settimeout}{value}
Set a timeout on blocking socket operations. Value can be any numeric value
or \var{None}. Socket operations will raise an \exception{error} exception
if the timeout period \var{value} has elapsed before the operation has
completed. Setting a timeout of \var{None} disables timeouts on socket
operations.
\end{methoddesc}
\begin{methoddesc}[socket]{gettimeout}{}
Returns the timeout in floating seconds associated with socket operations.
A timeout of None indicates that timeouts on socket operations are
disabled.
\end{methoddesc}
Some notes on the interaction between socket blocking and timeouts:
socket blocking mode takes precendence over timeouts. If a socket
if set to non-blocking mode, then timeouts set on sockets are never
don't mean anything. The timeout value associated with the socket
can still be set via settimeout and its value retrieved via gettimeout,
but the timeout is never enforced (i.e, an exception will never be
thrown). Otherwise, if the socket is in blocking mode, setting the
timeout will raise an exception as expected.
\begin{methoddesc}[socket]{setsockopt}{level, optname, value} \begin{methoddesc}[socket]{setsockopt}{level, optname, value}
Set the value of the given socket option (see the \UNIX{} manual page Set the value of the given socket option (see the \UNIX{} manual page
\manpage{setsockopt}{2}). The needed symbolic constants are defined in \manpage{setsockopt}{2}). The needed symbolic constants are defined in