diff --git a/tests/iobound_async.py b/tests/iobound_async.py new file mode 100644 index 00000000..b0f91543 --- /dev/null +++ b/tests/iobound_async.py @@ -0,0 +1,42 @@ +import socket +import select + +def send_request(env, client): + + client.setblocking(1) + + client.send("GET /intl/it_it/images/logo.gif HTTP/1.0\r\n") + client.send("Host: www.google.it\r\n\r\n") + + while 1: + yield env['x-wsgiorg.fdevent.readable'](client.fileno(), 10) + buf = client.recv(4096) + if len(buf) == 0: + break + else: + yield buf + + +def application(env, start_response): + + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.setblocking(0) + + env['x-wsgiorg.fdevent.readable'] = lambda fd,t: "" + env['x-wsgiorg.fdevent.writable'] = lambda fd,t: "" + + yield "" + + c = s.connect_ex(('www.google.it', 80)) + if c == 115: + yield env['x-wsgiorg.fdevent.writable'](s.fileno(), 10) + for r in send_request(env, s): + yield r + elif c == 0: + for r in send_request(env, s): + yield r + else: + start_response( '500 Internal Server Error', [ ('Content-Type', 'text/html')]) + yield "Internal Server Error" + + s.close()