summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorRyan Williams <rdw@lindenlab.com>2010-02-28 15:00:19 -0800
committerRyan Williams <rdw@lindenlab.com>2010-02-28 15:00:19 -0800
commit6f7cc6a112a5b415a6e959b5e91deee0ae2b9144 (patch)
tree0a7073fd4be2b2c2f569b72021d9eaf7b589b232 /examples
parent34557336096d133c5369aa1b5a0945f51e471717 (diff)
parent75e50ee098da6a41fc72e879239d39ec06d4a0e4 (diff)
downloadeventlet-6f7cc6a112a5b415a6e959b5e91deee0ae2b9144.tar.gz
Merge
Diffstat (limited to 'examples')
-rw-r--r--examples/forwarder.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/examples/forwarder.py b/examples/forwarder.py
new file mode 100644
index 0000000..1cc4fa4
--- /dev/null
+++ b/examples/forwarder.py
@@ -0,0 +1,24 @@
+""" This is an incredibly simple port forwarder from port 7000 to 22 on localhost. It calls a callback function when the socket is closed, to demonstrate one way that you could start to do interesting things by
+starting from a simple framework like this.
+"""
+
+import eventlet
+def closed_callback():
+ print "called back"
+
+def forward(source, dest, cb = lambda: None):
+ """Forwards bytes unidirectionally from source to dest"""
+ while True:
+ d = source.recv(32384)
+ if d == '':
+ cb()
+ break
+ dest.sendall(d)
+
+listener = eventlet.listen(('localhost', 7000))
+while True:
+ client, addr = listener.accept()
+ server = eventlet.connect(('localhost', 22))
+ # two unidirectional forwarders make a bidirectional one
+ eventlet.spawn_n(forward, client, server, closed_callback)
+ eventlet.spawn_n(forward, server, client)