jetty-9 improved handling of half close
This commit is contained in:
parent
6d2da78aac
commit
2a66567a5b
|
@ -277,6 +277,11 @@ public class SslConnection extends AbstractConnection
|
|||
super(null,getEndPoint().getLocalAddress(), getEndPoint().getRemoteAddress());
|
||||
}
|
||||
|
||||
public EndPoint getEncryptedEndPoint()
|
||||
{
|
||||
return getEndPoint();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FillInterest getFillInterest()
|
||||
{
|
||||
|
@ -761,5 +766,11 @@ public class SslConnection extends AbstractConnection
|
|||
{
|
||||
return _ishut;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return super.toString()+"->"+getEndPoint().toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -201,6 +201,8 @@ public class HttpConnection extends AbstractConnection
|
|||
{
|
||||
LOG.debug("{} onReadable {}",this,_channel.isIdle());
|
||||
|
||||
int filled=-2;
|
||||
|
||||
try
|
||||
{
|
||||
setCurrentConnection(this);
|
||||
|
@ -214,7 +216,7 @@ public class HttpConnection extends AbstractConnection
|
|||
if (_requestBuffer==null)
|
||||
_requestBuffer=_bufferPool.acquire(_httpConfig.getRequestHeaderSize(),false); // TODO may acquire on speculative read. probably released to early
|
||||
|
||||
int filled=getEndPoint().fill(_requestBuffer);
|
||||
filled=getEndPoint().fill(_requestBuffer);
|
||||
|
||||
LOG.debug("{} filled {}",this,filled);
|
||||
|
||||
|
@ -233,6 +235,9 @@ public class HttpConnection extends AbstractConnection
|
|||
// read -1 then we have nothing to parse and thus nothing that
|
||||
// will generate a response. If we had a suspended request pending
|
||||
// a response or a request waiting in the buffer, we would not be here.
|
||||
if (getEndPoint().isOutputShutdown())
|
||||
getEndPoint().close();
|
||||
else
|
||||
getEndPoint().shutdownOutput();
|
||||
// buffer must be empty and the channel must be idle, so we can release.
|
||||
releaseRequestBuffer();
|
||||
|
@ -480,8 +485,10 @@ public class HttpConnection extends AbstractConnection
|
|||
// make sure that an oshut connection is driven towards close
|
||||
// TODO this is a little ugly
|
||||
if (getEndPoint().isOpen() && getEndPoint().isOutputShutdown())
|
||||
{
|
||||
fillInterested();
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
@Override
|
||||
|
|
|
@ -1040,6 +1040,12 @@ public abstract class HttpServerTestBase extends HttpServerTestFixture
|
|||
Thread.sleep(200);
|
||||
|
||||
// TODO this sometimes fails for SSL ???
|
||||
if (handler._endp.isOpen())
|
||||
{
|
||||
System.err.println(handler._endp);
|
||||
System.err.println(((SslConnection.DecryptedEndPoint)handler._endp).getEncryptedEndPoint());
|
||||
System.err.println(handler._endp.getConnection());
|
||||
}
|
||||
assertTrue(!handler._endp.isOpen());
|
||||
}
|
||||
finally
|
||||
|
@ -1051,7 +1057,7 @@ public abstract class HttpServerTestBase extends HttpServerTestFixture
|
|||
}
|
||||
}
|
||||
|
||||
protected static class CommittedErrorHandler extends AbstractHandler
|
||||
public static class CommittedErrorHandler extends AbstractHandler
|
||||
{
|
||||
public EndPoint _endp;
|
||||
|
||||
|
|
|
@ -13,8 +13,10 @@
|
|||
|
||||
package org.eclipse.jetty.server.ssl;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.Socket;
|
||||
import java.security.KeyStore;
|
||||
|
@ -24,8 +26,14 @@ import javax.net.ssl.HttpsURLConnection;
|
|||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.TrustManagerFactory;
|
||||
|
||||
import org.eclipse.jetty.io.ssl.SslConnection;
|
||||
import org.eclipse.jetty.server.HttpChannel;
|
||||
import org.eclipse.jetty.server.HttpServerTestBase;
|
||||
import org.eclipse.jetty.server.SelectChannelConnector;
|
||||
import org.eclipse.jetty.server.HttpServerTestBase.CommittedErrorHandler;
|
||||
import org.eclipse.jetty.util.IO;
|
||||
import org.eclipse.jetty.util.log.Log;
|
||||
import org.eclipse.jetty.util.log.StdErrLog;
|
||||
import org.eclipse.jetty.util.ssl.SslContextFactory;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
|
@ -136,4 +144,5 @@ public class SelectChannelServerSslTest extends HttpServerTestBase
|
|||
{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue