No title Revision 376561666438 (Fri Jan 27 2012 at 23:13) - Diff Link to this snippet: https://friendpaste.com/5Hy6BDknMItVzZ4XX3RtHf Embed: manni perldoc borland colorful default murphy trac fruity autumn bw emacs pastie friendly Show line numbers Wrap lines 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110diff --git a/socketpool/backend_eventlet.py b/socketpool/backend_eventlet.pyindex 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.pyindex 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.pyindex 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.pyindex 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.pyindex 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