Just noticed that although WSGI PEP doesn't specifically mention that argument to read() on wsgi.input is optional, wsgiref.validate allows calling read() with no argument.
>From wsgiref.validate: """ * That wsgi.input is used properly: - .read() is called with zero or one argument class InputWrapper: def read(self, *args): assert_(len(args) <= 1) v = self.input.read(*args) assert_(type(v) is type("")) return v """ Of course, the issue is still that WSGI PEP says: """The server is not required to read past the client's specified Content-Length, and ***is allowed to simulate an end-of-file condition if the application attempts to read past that point***.""" Thus, simulating end-of-file condition is not mandatory, and so if something does call read() with no argument, not guaranteed it will actually return. The problem case here being where HTTP/1.1 request pipelining is being used and WSGI adapter is using raw socket as wsgi.input. The socket isn't going to be closed in this case as potentially another request to yet be sent over same socket. Thus application call of read() with no arguments will hang until client decides to close socket connection. Anyway, I thought it was interesting that wsgiref.validate accepts that argument read() can be optional. Supports further that this part of WSGI PEP needs to be clarified and end-of-file condition perhaps made mandatory. Graham _______________________________________________ Web-SIG mailing list Web-SIG@python.org Web SIG: http://www.python.org/sigs/web-sig Unsubscribe: http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com