In article <[EMAIL PROTECTED]>, Ron Garret <[EMAIL PROTECTED]> wrote:
> Here's my code. It's a teeny weeny little HTTP server. (I'm not really > trying to reinvent the wheel here. What I'm really doing is writing a > dispatching proxy server, but this is the shortest way to illustrate the > problem I'm having): > > from SocketServer import * > from socket import * > from select import select > > class myHandler(StreamRequestHandler): > def handle(self): > print '>>>>>>>>>>>' > while 1: > sl = select([self.rfile],[],[])[0] > if sl: > l = self.rfile.readline() > if len(l)<3: break > print l, > pass > pass > print>>self.wfile, 'HTTP/1.0 200 OK' > print>>self.wfile, 'Content-type: text/plain' > print>>self.wfile > print>>self.wfile, 'foo' > self.rfile.close() > self.wfile.close() > print '<<<<<<<<<<<<' > pass > pass > > def main(): > server = TCPServer(('',8080), myHandler) > server.serve_forever() > pass > > if __name__ == '__main__': main() > > > If I telnet into this server and type in an HTTP request manually it > works fine. But when I try to access this with a browser (I've tried > Firefox and Safari -- both do the same thing) it hangs immediately after > reading the first line in the request (i.e. before reading the first > header). > > When I click the "stop" button in the browser it breaks the logjam and > the server reads the headers (but then of course it dies trying to write > the response to a now-closed socket). > > The only difference I can discern is that the browser send \r\n for > end-of-line while telnet just sends \n. But I don't see why that should > make any difference. So I'm stumped. Any clues would be much > appreciated. I have reproduced the problem using Telnet, so that proves it's not an EOL issue. The problem seems to be timing-related. If I type the request in manually it works. If I paste it in all at once, it hangs. It's actually even weirder than that: if I pipe the request into a telnet client then it hangs after the request line, just with a browser (or wget). But if I literally paste the request into a window running a telnet client, it gets past the request line and four out of seven headers before it hangs. rg -- http://mail.python.org/mailman/listinfo/python-list