pull in additional changes from 2.0 branch.
[monitor.git] / monitor / Rpyc / Servers / selecting_server.py
diff --git a/monitor/Rpyc/Servers/selecting_server.py b/monitor/Rpyc/Servers/selecting_server.py
new file mode 100644 (file)
index 0000000..0136d63
--- /dev/null
@@ -0,0 +1,29 @@
+import select\r
+import socket\r
+from ServerUtils import log, create_listener_socket, DEFAULT_PORT, SocketStream, Connection\r
+\r
+\r
+def main(port = DEFAULT_PORT):\r
+    sock = create_listener_socket(port)\r
+    connections = []\r
+    \r
+    while True:\r
+        rlist, wlist, xlist = select.select([sock] + connections, [], [])\r
+        \r
+        if sock in rlist:\r
+            rlist.remove(sock)\r
+            newsock, name = sock.accept()\r
+            conn = Connection(SocketStream(newsock))\r
+            conn.sockname = name\r
+            connections.append(conn)\r
+            log("welcome", conn.sockname)\r
+        \r
+        for conn in rlist:\r
+            try:\r
+                conn.serve()\r
+            except (EOFError, socket.error):\r
+                connections.remove(conn)\r
+                log("goodbyte", conn.sockname)\r
+\r
+if __name__ == "__main__":\r
+    main()\r