--- Revision None +++ Revision 376561666438 @@ -0,0 +1,110 @@ +diff --git a/socketpool/backend_eventlet.py b/socketpool/backend_eventlet.py +index c86411e..9a93a57 100644 +--- a/socketpool/backend_eventlet.py ++++ b/socketpool/backend_eventlet.py +@@ -4,6 +4,7 @@ + # See the NOTICE for more information. + + import eventlet ++from eventlet.green import select + from eventlet.green import socket + from eventlet import queue + +@@ -11,6 +12,7 @@ from socketpool.pool import ConnectionPool + + sleep = eventlet.sleep + Socket = socket.socket ++Select = select.select + + class PriorityQueue(queue.PriorityQueue): + +diff --git a/socketpool/backend_gevent.py b/socketpool/backend_gevent.py +index ce5ba12..5d44536 100644 +--- a/socketpool/backend_gevent.py ++++ b/socketpool/backend_gevent.py +@@ -4,6 +4,7 @@ + # See the NOTICE for more information. + + import gevent ++from gevent import select + from gevent import socket + from gevent import queue + +@@ -12,7 +13,7 @@ from socketpool.pool import ConnectionPool + sleep = gevent.sleep + PriorityQueue = queue.PriorityQueue + Socket = socket.socket +- ++Select = select.select + + class ConnectionReaper(gevent.Greenlet): + +diff --git a/socketpool/backend_thread.py b/socketpool/backend_thread.py +index 621edd4..ae8f751 100644 +--- a/socketpool/backend_thread.py ++++ b/socketpool/backend_thread.py +@@ -12,9 +12,11 @@ try: + except ImportError: # py3 + import queue + ++Select = select.select + Socket = socket.socket + sleep = time.sleep + ++ + class PriorityQueue(queue.PriorityQueue): + + def __iter__(self): +diff --git a/socketpool/conn.py b/socketpool/conn.py +index 3d92618..f81ced2 100644 +--- a/socketpool/conn.py ++++ b/socketpool/conn.py +@@ -3,6 +3,7 @@ + # This file is part of socketpool. + # See the NOTICE for more information. + ++import select + import socket + import time + +@@ -30,6 +31,7 @@ class TcpConnector(Connector): + self._s.connect((host, port)) + self.host = host + self.port = port ++ self.backend_mod = backend_mod + self._connected = True + self._life = time.time() + +@@ -39,7 +41,15 @@ class TcpConnector(Connector): + return target_host == self.host and target_port == self.port + + def is_connected(self): +- return self._connected ++ if self._connected: ++ try: ++ r, _, _ = self.backend_mod.Select([self._s], [], [], 0) ++ if not r: ++ return True ++ except (ValueError, select.error,): ++ return False ++ self.close() ++ return False + + def handle_exception(self, exception): + print 'got an exception' +diff --git a/socketpool/pool.py b/socketpool/pool.py +index 2d68d27..9048fca 100644 +--- a/socketpool/pool.py ++++ b/socketpool/pool.py +@@ -89,8 +89,9 @@ class ConnectionPool(object): + # let's put it back + self.pool.put((priority, candidate)) + else: +- found = candidate +- break ++ if candidate.is_connected(): ++ found = candidate ++ break + + if i <= 0: + break