https://bz.apache.org/bugzilla/show_bug.cgi?id=59010
Bug ID: 59010
Summary: Disabling socketBuffer with "-1" doesn't cause
exception on linux
Product: Tomcat 7
Version: 7.0.54
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Catalina
Assignee: [email protected]
Reporter: [email protected]
I have implemented a service using Http11Protocol and I have disabled the
socketBuffer for the object by setting its value to "-1". When the client
disconnects before the server responds, then on windows I see the exception:
SEVERE: Error processing request
java.net.SocketException: Unrecognized Windows Sockets error: 0: socket write
er
ror
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:125)
at java.net.SocketOutputStream.write(SocketOutputStream.java:171)
at
org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffe
r.doWrite(InternalOutputBuffer.java:243)
at
org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(Identit
yOutputFilter.java:84)
at
org.apache.coyote.http11.AbstractOutputBuffer.doWrite(AbstractOutputB
uffer.java:192)
at org.apache.coyote.Response.doWrite(Response.java:499)
at dummyAdapter.service(dummyAdapter.java:49)
But on linux, I don't see any exception raised.
My listener looks like this:
public class TomcatCipherTst {
public static void main(String[] args) throws Exception {
Http11Protocol h1p = new BrokerProtocolHandler();
h1p.setSocketBuffer(-1);
h1p.setMaxKeepAliveRequests(-1);
Adapter ac = new dummyAdapter();
h1p.setAdapter(ac);
h1p.setPort(7677);
h1p.init();
h1p.start();
boolean status = ((BrokerProtocolHandler)h1p).getEndpoint().isRunning();
System.out.println("status = " + status);
Thread.sleep(1000000);
}
}
My adapter service implementation looks like this:
public class dummyAdapter implements Adapter {
public boolean asyncDispatch(Request arg0, Response arg1, SocketStatus arg2)
throws Exception {
return false;
}
public boolean event(Request arg0, Response arg1, SocketStatus arg2)
throws Exception {
return false;
}
public String getDomain() {
return null;
}
public void log(Request arg0, Response arg1, long arg2) {
}
public void service(Request req, Response res) throws Exception {
System.out.println("We got em");
Thread.sleep(3000);
String resp = new String("We got request for |" +
req.requestURI().toString() + "|");
ByteChunk bc = new ByteChunk();
byte[] respBA = resp.getBytes("utf-8");
bc.setBytes(respBA, 0, respBA.length);
res.setContentLength(respBA.length);
res.doWrite(bc);
res.finish();
}
public void checkRecycled(Request arg0, Response arg1) {
}
public void errorDispatch(Request arg0, Response arg1) {
}
}
BrokerProtocolHandler is:
public class BrokerProtocolHandler extends
org.apache.coyote.http11.Http11Protocol
{
public BrokerProtocolHandler() {
super();
}
public AbstractEndpoint getEndpoint() {
return endpoint;
}
}
Can you please take a look at this and help us understand why there is no
exception on linux?
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]