gdfbarbosa
gdfbarbosa

Reputation: 835

Broken Pipe when writing bytes in ServletOutputStream

While executing this code,

ServletOutputStream out = response.getOutputStream();
out.write(bytes, 0, bytes.length);
out.flush();  
out.close();  

I'm getting this exception frequently and I can't figure out why it's happening.

Caused by: ClientAbortException:  java.net.SocketException: Broken pipe
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)

I have a web app running in a linux server, under JBoss 4.2.3 and MySQL.

How is this caused and how can I solve it?

Upvotes: 15

Views: 54409

Answers (2)

Vimalkumar Natarajan
Vimalkumar Natarajan

Reputation: 111

This can be improved by adding proper response.setBufferSize(bufferSizeneeded+200); The default buffer size is 8124 , Which may not be applicable for all the users ! and response.setHeader("Content-Length", String.valueOf(exportData.length));

Upvotes: 3

km1
km1

Reputation: 2443

Typically this is due to the client disconnecting. There are several reasons the client may have disconnected (timed out, browser was closed, etc). Also, as general practice, if you didn't open the stream then don't close. More on closing the stream here Should I close the servlet outputstream?.

Upvotes: 11

Related Questions