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. :-)
diff --git a/Doc/lib/libsocket.tex b/Doc/lib/libsocket.tex
index 97c5184..0fe8940 100644
--- a/Doc/lib/libsocket.tex
+++ b/Doc/lib/libsocket.tex
@@ -514,6 +514,29 @@
 block until they can proceed.
 \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}
 Set the value of the given socket option (see the \UNIX{} manual page
 \manpage{setsockopt}{2}).  The needed symbolic constants are defined in