5Hy6BDknMItVzZ4XX3RtHf changeset

Changeset376561666438 (b)
ParentNone (a)
ab
0+diff --git a/socketpool/backend_eventlet.py b/socketpool/backend_eventlet.py
0+index c86411e..9a93a57 100644
0+--- a/socketpool/backend_eventlet.py
0++++ b/socketpool/backend_eventlet.py
0+@@ -4,6 +4,7 @@
0+ # See the NOTICE for more information.
0+ 
0+ import eventlet
0++from eventlet.green import select
0+ from eventlet.green import socket
0+ from eventlet import queue
0+ 
0+@@ -11,6 +12,7 @@ from socketpool.pool import ConnectionPool
0+ 
0+ sleep = eventlet.sleep
0+ Socket = socket.socket
0++Select = select.select
0+ 
0+ class PriorityQueue(queue.PriorityQueue):
0+ 
0+diff --git a/socketpool/backend_gevent.py b/socketpool/backend_gevent.py
0+index ce5ba12..5d44536 100644
0+--- a/socketpool/backend_gevent.py
0++++ b/socketpool/backend_gevent.py
0+@@ -4,6 +4,7 @@
0+ # See the NOTICE for more information.
0+ 
0+ import gevent
0++from gevent import select
0+ from gevent import socket
0+ from gevent import queue
0+ 
0+@@ -12,7 +13,7 @@ from socketpool.pool import ConnectionPool
0+ sleep = gevent.sleep
0+ PriorityQueue = queue.PriorityQueue
0+ Socket = socket.socket
0+-
0++Select = select.select
0+ 
0+ class ConnectionReaper(gevent.Greenlet):
0+ 
0+diff --git a/socketpool/backend_thread.py b/socketpool/backend_thread.py
0+index 621edd4..ae8f751 100644
0+--- a/socketpool/backend_thread.py
0++++ b/socketpool/backend_thread.py
0+@@ -12,9 +12,11 @@ try:
0+ except ImportError: # py3
0+     import queue
0+ 
0++Select = select.select
0+ Socket = socket.socket
0+ sleep = time.sleep
0+ 
0++
0+ class PriorityQueue(queue.PriorityQueue):
0+ 
0+     def __iter__(self):
0+diff --git a/socketpool/conn.py b/socketpool/conn.py
0+index 3d92618..f81ced2 100644
0+--- a/socketpool/conn.py
0++++ b/socketpool/conn.py
0+@@ -3,6 +3,7 @@
0+ # This file is part of socketpool.
0+ # See the NOTICE for more information.
0+ 
0++import select
0+ import socket
0+ import time
0+ 
0+@@ -30,6 +31,7 @@ class TcpConnector(Connector):
0+         self._s.connect((host, port))
0+         self.host = host
0+         self.port = port
0++        self.backend_mod = backend_mod
0+         self._connected = True
0+         self._life = time.time()
0+ 
0+@@ -39,7 +41,15 @@ class TcpConnector(Connector):
0+         return target_host == self.host and target_port == self.port
0+ 
0+     def is_connected(self):
0+-        return self._connected
0++        if self._connected:
0++            try:
0++                r, _, _ = self.backend_mod.Select([self._s], [], [], 0)
0++                if not r:
0++                    return True
0++            except (ValueError, select.error,):
0++                return False
0++            self.close()
0++        return False
0+ 
0+     def handle_exception(self, exception):
0+         print 'got an exception'
0+diff --git a/socketpool/pool.py b/socketpool/pool.py
0+index 2d68d27..9048fca 100644
0+--- a/socketpool/pool.py
0++++ b/socketpool/pool.py
0+@@ -89,8 +89,9 @@ class ConnectionPool(object):
0+                     # let's put it back
0+                     self.pool.put((priority, candidate))
0+                 else:
0+-                    found = candidate
0+-                    break
0++                    if candidate.is_connected():
0++                        found = candidate
0++                        break
0+ 
0+                 if i <= 0:
0+                     break
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
--- 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