tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Warnier ...@ice-sa.com>
Subject Re: EOFException in AjpNioProcessor
Date Sun, 22 Dec 2013 11:25:11 GMT
Jesse Barnum wrote:
> On Dec 18, 2013, at 1:40 PM, André Warnier <aw@ice-sa.com> wrote:
> 
>> Jesse Barnum wrote:
>>> On Dec 18, 2013, at 12:27 PM, Jesse Barnum <jsb_tomcat@360works.com> wrote:
>>>> I'm seeing this error a lot in my log files. It happens when I am trying
to read from the request InputStream. Should I be concerned about this, or is it just the
equivalent of the user clicking 'stop' in their browser?
>>>>
>>>>> SEVERE: An error occurred while handling request /WSMRegister/LicenseCheck/handshake
>>>>> java.io.EOFException
>>> Forgot to mention, I'm running version 7.0.35 on Ubuntu Linux on Amazon EC2.
>> Well, it seems that you have the explanation right there.
>> If "com.prosc.licensecheck.LicenseCheck.doPost" is your code, then that's where the
problem is : you are trying to read from the request input stream, when there is no more data
to read and you have already seen it's EOF.
>> Why there is no more data to read is another question, and it could be that the client
did something wrong.  But the code in those classes who do the read, obviously is not coping
well with that case.
>>
> 
> Yes, com.prosc.licensecheck.ListCheck.doPost is my code. It would not be hard to catch
the exception there and ignore it.
> 
> I guess another way to phrase the question is, "what would cause a java.io.EOFException
to get thrown?" I don't want to ignore it if it's trying to tell me something important.
> 
> I am used to seeing "ClientAbortException: java.net.SocketException: Broken pipe". Is
the EOFException basically the same thing? My concern is that there might be some misconfiguration
between the Apache front end and the Tomcat NIO connector that might be causing it.

First I will state that I am not a Java specialist, so take the following with a grain of

caution.
This being said, I believe that these two exceptions mean two different things.

A "broken pipe" exception occurs when your program can legitimately expect more data to be

present on the stream being read, tries to read it, and gets back an error because the 
stream, unexpectedly, does not exist anymore (typically, because the other party supposed

to write to that stream has gone away without warning).

An EOF exception is different : you are reading from a stream. At some point, the read() 
returns an EOF condition, indicating that no more data is present.  That's not an 
exception yet, it is a normal condition for which you should be testing, and when it 
occurs you should stop reading.
(I do not remember precisely how your code should test for this in Java.  It may be that 
an EOF is indicated by the fact that the read() returns 0 bytes.  Or maybe you should test

explicitly by means of something like "if (stream.eof) then ..) after each read().

But you do NOT stop reading, and you do one more read() nevertheless. /Then/ you get this

exception, because now, you are trying to read /past/ the end of the file/stream (EOF).
(It's like : you are approaching train-track crossing; you see the red light, and you 
should stop; but you don't, and you proceed nevertheless.  The EOF exception is the train

that happens to be passing just then).

Note that it may not be directly your code per se which already reads the request 
input-stream and already reaches the EOF.  An earlier call to 
HttpServletRequest.getParameters() for example, would trigger the reading of the whole 
body of a POST request, to parse the POST parameters, and would already leave the request

input-stream at EOF, before you even try your first explicit read().

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message