From 82f50339982b4a6d4095ce8bfe45dd7aeb29311a Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Sat, 14 Sep 2013 18:20:20 +0200 Subject: [PATCH] pywsgi: fix logging when bound on unix socket Thanks to Chris Meyers (#295), Eugene Pankov (#300). Added examples: unixsocket_server.py and unixsocket_client.py that help reproduce the issue. --- examples/unixsocket_client.py | 9 +++++++++ examples/unixsocket_server.py | 18 ++++++++++++++++++ gevent/pywsgi.py | 3 ++- greentest/test__examples.py | 2 +- 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 examples/unixsocket_client.py create mode 100644 examples/unixsocket_server.py diff --git a/examples/unixsocket_client.py b/examples/unixsocket_client.py new file mode 100644 index 000000000..426a2600e --- /dev/null +++ b/examples/unixsocket_client.py @@ -0,0 +1,9 @@ +import socket + +s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) +s.connect("./unixsocket_server.py.sock") +s.send('GET / HTTP/1.0\r\n\r\n') +data = s.recv(1024) +print 'received %s bytes' % len(data) +print data +s.close() diff --git a/examples/unixsocket_server.py b/examples/unixsocket_server.py new file mode 100644 index 000000000..19c066b29 --- /dev/null +++ b/examples/unixsocket_server.py @@ -0,0 +1,18 @@ +import os +from gevent.pywsgi import WSGIServer +from gevent import socket + + +def application(environ, start_response): + start_response('200 OK', []) + return [] + + +if __name__ == '__main__': + listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sockname = './' + os.path.basename(__file__) + '.sock' + if os.path.exists(sockname): + os.remove(sockname) + listener.bind(sockname) + listener.listen(1) + WSGIServer(listener, application).serve_forever() diff --git a/gevent/pywsgi.py b/gevent/pywsgi.py index a2e081d19..69a886051 100644 --- a/gevent/pywsgi.py +++ b/gevent/pywsgi.py @@ -466,8 +466,9 @@ def format_request(self): delta = '%.6f' % (self.time_finish - self.time_start) else: delta = '-' + client_address = self.client_address[0] if isinstance(self.client_address, tuple) else self.client_address return '%s - - [%s] "%s" %s %s %s' % ( - self.client_address[0], + client_address or '-', now, self.requestline, (getattr(self, 'status', None) or '000').split()[0], diff --git a/greentest/test__examples.py b/greentest/test__examples.py index 75cad2c87..2d9ed8b88 100644 --- a/greentest/test__examples.py +++ b/greentest/test__examples.py @@ -6,7 +6,7 @@ cwd = '../examples/' -ignore = ['wsgiserver.py', 'wsgiserver_ssl.py', 'webproxy.py', 'webpy.py'] +ignore = ['wsgiserver.py', 'wsgiserver_ssl.py', 'webproxy.py', 'webpy.py', 'unixsocket_server.py', 'unixsocket_client.py'] if sys.platform == 'win32': ignore += ['geventsendfile.py', 'psycopg2_pool.py'] ignore += [x[14:] for x in glob.glob('test__example_*.py')]