pull in additional changes from 2.0 branch.
[monitor.git] / monitor / Rpyc / Servers / forking_server.py
diff --git a/monitor/Rpyc/Servers/forking_server.py b/monitor/Rpyc/Servers/forking_server.py
new file mode 100644 (file)
index 0000000..bfe78c8
--- /dev/null
@@ -0,0 +1,26 @@
+import sys\r
+import os\r
+from ServerUtils import serve_socket, create_listener_socket, DEFAULT_PORT\r
+\r
+\r
+def serve_in_child(sock):\r
+    """forks a child to run the server in. the parent doesnt wait() for the child, \r
+    so if you do a `ps`, you'll see zombies. but who cares. i used to do a doublefork()\r
+    for that, but it's really meaningless. anyway, when the parent dies, the zombies\r
+    die as well."""\r
+    if os.fork() == 0:\r
+        try:\r
+            serve_socket(sock)\r
+        finally:\r
+            sys.exit()\r
+\r
+def main(port = DEFAULT_PORT):\r
+    sock = create_listener_socket(port)\r
+    while True:\r
+        newsock, name = sock.accept()\r
+        serve_in_child(newsock)\r
+\r
+if __name__ == "__main__":\r
+    main()\r
+\r
+    
\ No newline at end of file