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/Modules/socketmodule.h b/Modules/socketmodule.h
index a59e6f7..4d17f08 100644
--- a/Modules/socketmodule.h
+++ b/Modules/socketmodule.h
@@ -83,6 +83,9 @@
 	PyObject *(*errorhandler)(void); /* Error handler; checks
 					    errno, returns NULL and
 					    sets a Python exception */
+	int sock_blocking;		 /* Flag indicated whether the
+					    socket is in blocking mode */
+	double sock_timeout;		 /* Operation timeout value */
 } PySocketSockObject;
 
 /* --- C API ----------------------------------------------------*/