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
