HttpParserException: End Of File

orjan@spinne.ip.lu writes:
 > Hi there!
 > 
 > I'v been jusing the Jigsaw class framework for some time now in my 
 > own little HTTP server project, but lately I'v run into some bizarre 
 > problems (and I have a feeling that my problems might not be linked 
 > to the Jigsaw classes but to bugs in Java itself, but anyway!!)
 > 
 > Here's the situation (very simplified):
 > 
 > I have a normal sever situation and I'm using the w3.www.MimeParser 
 > class to parse the client request (I should also point out that this 
 > is in a single threaded sceeenarion; handling of the request is done 
 > directly after and in the same thread as receiving the connection).
 > 
 >     try { 
 >          clisock = servsock.accept();
 >     } catch (IOException ex) {  
 >          // Handle Exception ...
 >     }
 > 
 >    try { 
 >         in = new DataInputStream(clisock.getInputStream());
 >         out = new PrintStream(clisock.getOutputStream());
 >    } catch (IOException ex) {
 >          // Handle Exception ...
 >    }
 > 
 >    try {
 >         MimeClientFactory factory = new MimeClientFactory();
 >         MimeParser parser = new MimeParser(in, factory);           
 >         ClientRequest req = (ClientRequest) parser.parse();
 >    } catch (IOException ex) {
 >         // Handle Exception ...
 >    } catch (MimeParserException ex) {
 >         // Handle Exception ...
 >    }
 > 
 >    MimeClientFactory implements MimeParserFactory and ClientRequest 
 >    is basically a HttpRequestMessage.
 > 
 > Now, when I use a Netsacpe browser and resize a page retrived from my 
 > simplistic server, Netscape generates a request that in the best case 
 > generates a HttpParserException (End Of File) in my server. In the  
 > worst case the whole excution is blocked infinitely in the request 
 > parsing step WITHOUT generation any exceptions or errors!! This is 
 > really bad news in a single threaded server scheme! In a multi-
 > threaded server scheme (like Jigsaw) it might be bad news as well 
 > since it might create zombie threads.

I guess you are not handling persistent connections correctly. If, for
example, you don't tel netscape to close the connection, by *not*
sending a 'Connection: keep-alive' header, then it will probably reuse
the connection. 

Another possible problem is if netscape closes the connection (which
it has the right to do), and then tries to reopen a fresh one.

In summary: is the above code the real code, or do you loop and handle
multiple requests on the same connection ?

Anselm.

Received on Monday, 6 January 1997 07:15:38 UTC