summaryrefslogtreecommitdiff
path: root/python/qpid/compat.py
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2009-10-23 18:47:26 +0000
committerRafael H. Schloming <rhs@apache.org>2009-10-23 18:47:26 +0000
commita581be3f131e53b3f18aff392d5d28222d20e71d (patch)
tree02d12d47aaf3eb1247b77ac2442ec6857ac82f7f /python/qpid/compat.py
parenta63be09b172c9091b87dedaceaa755777b914756 (diff)
downloadqpid-python-a581be3f131e53b3f18aff392d5d28222d20e71d.tar.gz
reworked fix of r827747 (QPID-2149)
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@829173 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/qpid/compat.py')
-rw-r--r--python/qpid/compat.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/python/qpid/compat.py b/python/qpid/compat.py
index 53ab757e89..e38f0dbe8c 100644
--- a/python/qpid/compat.py
+++ b/python/qpid/compat.py
@@ -42,3 +42,64 @@ if tuple(sys.version_info[0:2]) < (2, 4):
return old_select(list(rlist), list(wlist), list(xlist), timeout)
else:
from select import select
+
+if sys.platform in ('win32', 'cygwin'):
+ import socket
+
+ class SockWaiter:
+
+ def __init__(self, read_sock, write_sock):
+ self.read_sock = read_sock
+ self.write_sock = write_sock
+
+ def wakeup(self):
+ self.write_sock.send("\0")
+
+ def fileno(self):
+ return self.read_sock.fileno()
+
+ def reading(self):
+ return True
+
+ def readable(self):
+ self.read_sock.recv(65536)
+
+ def __repr__(self):
+ return "SockWaiter(%r, %r)" % (self.read_sock, self.write_sock)
+
+ def selectable_waiter():
+ listener = socket.socket()
+ listener.bind(('', 0))
+ listener.listen(1)
+ _, port = listener.getsockname()
+ write_sock = socket.socket()
+ write_sock.connect(("127.0.0.1", port))
+ read_sock, _ = listener.accept()
+ listener.close()
+ return SockWaiter(read_sock, write_sock)
+else:
+ import os
+
+ class PipeWaiter:
+
+ def __init__(self, read_fd, write_fd):
+ self.read_fd = read_fd
+ self.write_fd = write_fd
+
+ def wakeup(self):
+ os.write(self.write_fd, "\0")
+
+ def fileno(self):
+ return self.read_fd
+
+ def reading(self):
+ return True
+
+ def readable(self):
+ os.read(self.read_fd, 65536)
+
+ def __repr__(self):
+ return "PipeWaiter(%r, %r)" % (self.read_fd, self.write_fd)
+
+ def selectable_waiter():
+ return PipeWaiter(*os.pipe())