diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/H2AsyncClientBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/H2AsyncClientBuilder.java index 61a73a1c4..7a5cfba1e 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/H2AsyncClientBuilder.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/H2AsyncClientBuilder.java @@ -102,6 +102,7 @@ import org.apache.hc.core5.reactor.DefaultConnectingIOReactor; import org.apache.hc.core5.reactor.IOEventHandlerFactory; import org.apache.hc.core5.reactor.IOReactorConfig; import org.apache.hc.core5.reactor.IOSession; +import org.apache.hc.core5.reactor.IOSessionListener; import org.apache.hc.core5.util.Args; import org.apache.hc.core5.util.TimeValue; import org.apache.hc.core5.util.VersionInfo; @@ -171,6 +172,7 @@ public class H2AsyncClientBuilder { } private IOReactorConfig ioReactorConfig; + private IOSessionListener ioSessionListener; private H2Config h2Config; private CharCodingConfig charCodingConfig; private SchemePortResolver schemePortResolver; @@ -239,6 +241,16 @@ public class H2AsyncClientBuilder { return this; } + /** + * Sets {@link IOSessionListener} listener. + * + * @since 5.2 + */ + public final H2AsyncClientBuilder setIOSessionListener(final IOSessionListener ioSessionListener) { + this.ioSessionListener = ioSessionListener; + return this; + } + /** * Sets {@link CharCodingConfig} configuration. */ @@ -764,7 +776,7 @@ public class H2AsyncClientBuilder { threadFactory != null ? threadFactory : new DefaultThreadFactory("httpclient-dispatch", true), ioSessionDecorator != null ? ioSessionDecorator : LoggingIOSessionDecorator.INSTANCE, ioReactorExceptionCallback != null ? ioReactorExceptionCallback : LoggingExceptionCallback.INSTANCE, - null, + ioSessionListener, ioSession -> ioSession.enqueue(new ShutdownCommand(CloseMode.GRACEFUL), Command.Priority.IMMEDIATE)); if (execInterceptors != null) { diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java index 20a1a374e..58510879a 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java @@ -112,6 +112,7 @@ import org.apache.hc.core5.reactor.DefaultConnectingIOReactor; import org.apache.hc.core5.reactor.IOEventHandlerFactory; import org.apache.hc.core5.reactor.IOReactorConfig; import org.apache.hc.core5.reactor.IOSession; +import org.apache.hc.core5.reactor.IOSessionListener; import org.apache.hc.core5.util.Args; import org.apache.hc.core5.util.TimeValue; import org.apache.hc.core5.util.VersionInfo; @@ -207,6 +208,7 @@ public class HttpAsyncClientBuilder { private AsyncClientConnectionManager connManager; private boolean connManagerShared; private IOReactorConfig ioReactorConfig; + private IOSessionListener ioSessionListener; private Callback ioReactorExceptionCallback; private Http1Config h1Config; private H2Config h2Config; @@ -319,6 +321,16 @@ public class HttpAsyncClientBuilder { return this; } + /** + * Sets {@link IOSessionListener} listener. + * + * @since 5.2 + */ + public final HttpAsyncClientBuilder setIOSessionListener(final IOSessionListener ioSessionListener) { + this.ioSessionListener = ioSessionListener; + return this; + } + /** * Sets the callback that will be invoked when the client's IOReactor encounters an uncaught exception. * @@ -934,7 +946,7 @@ public class HttpAsyncClientBuilder { threadFactory != null ? threadFactory : new DefaultThreadFactory("httpclient-dispatch", true), ioSessionDecorator != null ? ioSessionDecorator : LoggingIOSessionDecorator.INSTANCE, ioReactorExceptionCallback != null ? ioReactorExceptionCallback : LoggingExceptionCallback.INSTANCE, - null, + ioSessionListener, ioSession -> ioSession.enqueue(new ShutdownCommand(CloseMode.GRACEFUL), Command.Priority.IMMEDIATE)); if (execInterceptors != null) {