Skip to content

Socket timeout with Jetty #705

Open
Open
@avandecreme

Description

@avandecreme

The following code create an Eof exception on the server when running inside Jetty on the second call from the client:

Server side:

    public static void main(String[] args) throws Exception {
        Context context = new Context();
        context.getParameters().add("maxIoIdleTimeMs", "2000");
        context.getParameters().add("ioMaxIdleTimeMs", "2000");
        Server server = new Server(context, Protocol.HTTP, 8182, DummyServerResource.class);
        server.start();
    }
public class DummyServerResource extends ServerResource {

    @Get
    public String retrieve() {
        return "Dummy";
    }
}

Client side:

    public static void main(String[] args) throws IOException, InterruptedException {
        Context context = new Context();
        Client client = new Client(context, Protocol.HTTP);
        ClientResource cr = new ClientResource(URL);
        cr.setNext(client);
        Representation get = cr.get();
        System.out.println(get.getText());
        Thread.sleep(1000 * 3);
        ClientResource cr2 = new ClientResource(URL);
        cr2.setNext(client);
        Representation get2 = cr2.get();
        System.out.println(get2.getText());
    }

Exception:

2013-01-14 10:20:04.642:INFO:oejs.Server:jetty-7.6.5.v20120716
2013-01-14 10:20:04.681:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8182
The connection was broken. It was probably closed by the client.

org.eclipse.jetty.io.EofException
    at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:952)
    at org.eclipse.jetty.http.AbstractGenerator.flush(AbstractGenerator.java:438)
    at org.eclipse.jetty.server.HttpOutput.flush(HttpOutput.java:94)
    at org.eclipse.jetty.server.AbstractHttpConnection$Output.flush(AbstractHttpConnection.java:1016)
    at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:173)
    at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:101)
    at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
    at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
    at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
    at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
    at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
    at org.restlet.representation.StringRepresentation.write(StringRepresentation.java:238)
    at org.restlet.representation.CharacterRepresentation.write(CharacterRepresentation.java:76)
    at org.restlet.engine.adapter.ServerCall.writeResponseBody(ServerCall.java:510)
    at org.restlet.engine.adapter.ServerCall.sendResponse(ServerCall.java:454)
    at org.restlet.ext.jetty.internal.JettyCall.sendResponse(JettyCall.java:312)
    at org.restlet.engine.adapter.ServerAdapter.commit(ServerAdapter.java:196)
    at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:153)
    at org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:170)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:452)
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:884)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:938)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:630)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:622)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.nio.channels.ClosedChannelException
    at sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:251)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:473)
    at java.nio.channels.SocketChannel.write(SocketChannel.java:493)
    at org.eclipse.jetty.io.nio.ChannelEndPoint.gatheringFlush(ChannelEndPoint.java:371)
    at org.eclipse.jetty.io.nio.ChannelEndPoint.flush(ChannelEndPoint.java:330)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.flush(SelectChannelEndPoint.java:330)
    at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:876)
    ... 29 more

Workaround on stackoverflow: http://stackoverflow.com/questions/12943447/restlet-server-socket-timeout

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions