summaryrefslogtreecommitdiff
path: root/tests/sockets/socket_relay.py
diff options
context:
space:
mode:
authorToadKing <toadking@toadking.com>2013-08-12 23:30:49 -0400
committerToadKing <toadking@toadking.com>2013-08-12 23:30:49 -0400
commit7466223864929d50d02407dde1da331133a0bef1 (patch)
tree60403b8061880e6aea503a20d9c45b3e678ec6ad /tests/sockets/socket_relay.py
parentc2b064eb49ea63eec59add5751c8a9c2b80dab92 (diff)
parent3090cdd713609a9d3f749d13002a898e03cbd5e3 (diff)
Merge branch 'incoming' of https://github.com/kripken/emscripten into fixed_openal_buffers
Conflicts: src/library_openal.js
Diffstat (limited to 'tests/sockets/socket_relay.py')
-rw-r--r--tests/sockets/socket_relay.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/sockets/socket_relay.py b/tests/sockets/socket_relay.py
new file mode 100644
index 00000000..5b6403f9
--- /dev/null
+++ b/tests/sockets/socket_relay.py
@@ -0,0 +1,56 @@
+'''
+Listens on 2 ports and relays between them.
+
+Listens to ports A and B. When someone connects to port A, and then
+sends some data to port A, that data is sent to someone who
+connected to socket B. And so forth.
+
+This is different than say socat which will listen to one port
+and then make a connection to another port, and do bidirectional
+communication. We need to actually listen on both ports.
+'''
+
+import os, sys, socket, time, threading, signal
+from subprocess import Popen, PIPE, STDOUT
+
+ports = [int(sys.argv[1]), int(sys.argv[2])]
+
+class Listener(threading.Thread):
+ def run(self):
+ self.conn = None
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ global ports
+ port = ports[0]
+ ports = ports[1:]
+ print 'listener binding to ', port
+ s.bind(('127.0.0.1', port))
+ s.listen(1)
+ print 'listener', port, 'waiting for connection'
+ conn, addr = s.accept()
+ self.conn = conn
+ while 1:
+ time.sleep(0.5)
+ print 'listener', port, 'waiting for data'
+ data = conn.recv(20*1024)
+ if not data:
+ continue
+ while not self.other.conn:
+ print 'listener', port, 'waiting for other connection in order to send data'
+ time.sleep(1)
+ print 'listener', port, 'sending data', len(data)
+ self.other.conn.send(data)
+
+in_listener = Listener()
+in_listener.daemon = True
+in_listener.start()
+
+out_listener = Listener()
+out_listener.daemon = True
+out_listener.start()
+
+in_listener.other = out_listener
+out_listener.other = in_listener
+
+while 1:
+ time.sleep(1)
+