Added `#close` method that takes an optional Timeout as a parameter.
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java
index 0e293b7..410d6be 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java
@@ -57,6 +57,7 @@
 import org.apache.hc.core5.io.ModalCloseable;
 import org.apache.hc.core5.util.Args;
 import org.apache.hc.core5.util.TimeValue;
+import org.apache.hc.core5.util.Timeout;
 
 /**
  * HTTP/1.1 server side message exchange handler.
@@ -184,10 +185,23 @@
 
     @Override
     public void close(final CloseMode closeMode) {
+        close(closeMode, Timeout.ofSeconds(5));
+    }
+
+    /**
+     * Closes this process or endpoint and releases any system resources associated
+     * with it. If the endpoint or the process is already closed then invoking this
+     * method has no effect.
+     *
+     * @param closeMode How to close the receiver.
+     * @param timeout  How long to wait for the HttpServer to close gracefully.
+     * @since 5.2
+     */
+    public void close(final CloseMode closeMode, final Timeout timeout) {
         initiateShutdown();
         if (closeMode == CloseMode.GRACEFUL) {
             try {
-                awaitTermination(TimeValue.ofSeconds(5));
+                awaitTermination(timeout);
             } catch (final InterruptedException ex) {
                 Thread.currentThread().interrupt();
             }
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractSingleCoreIOReactor.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractSingleCoreIOReactor.java
index 3989e73..b2834d3 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractSingleCoreIOReactor.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractSingleCoreIOReactor.java
@@ -41,6 +41,7 @@
 import org.apache.hc.core5.io.Closer;
 import org.apache.hc.core5.util.Args;
 import org.apache.hc.core5.util.TimeValue;
+import org.apache.hc.core5.util.Timeout;
 
 abstract class AbstractSingleCoreIOReactor implements IOReactor {
 
@@ -128,10 +129,25 @@
 
     @Override
     public final void close(final CloseMode closeMode) {
+        close(closeMode, Timeout.ofSeconds(5));
+    }
+
+    /**
+     * Shuts down the I/O reactor either gracefully or immediately.
+     * During graceful shutdown individual I/O sessions should be
+     * informed about imminent termination and be given a grace period
+     * to complete the ongoing I/O sessions. During immediate shutdown
+     * all ongoing I/O sessions get aborted immediately.
+     *
+     * @param closeMode How to close the IO reactor.
+     * @param timeout  How long to wait for the IO reactor to close gracefully.
+     * @since 5.2
+     */
+    public void close(final CloseMode closeMode, final Timeout timeout) {
         if (closeMode == CloseMode.GRACEFUL) {
             initiateShutdown();
             try {
-                awaitShutdown(TimeValue.ofSeconds(5));
+                awaitShutdown(timeout);
             } catch (final InterruptedException e) {
                 Thread.currentThread().interrupt();
             }
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/MultiCoreIOReactor.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/MultiCoreIOReactor.java
index d4d4868..7be8764 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/MultiCoreIOReactor.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/MultiCoreIOReactor.java
@@ -35,6 +35,7 @@
 import org.apache.hc.core5.io.Closer;
 import org.apache.hc.core5.util.Args;
 import org.apache.hc.core5.util.TimeValue;
+import org.apache.hc.core5.util.Timeout;
 
 class MultiCoreIOReactor implements IOReactor {
 
@@ -109,10 +110,25 @@
 
     @Override
     public final void close(final CloseMode closeMode) {
+        close(closeMode, Timeout.ofSeconds(5));
+    }
+
+    /**
+     * Shuts down the I/O reactor either gracefully or immediately.
+     * During graceful shutdown individual I/O sessions should be
+     * informed about imminent termination and be given a grace period
+     * to complete the ongoing I/O sessions. During immediate shutdown
+     * all ongoing I/O sessions get aborted immediately.
+     *
+     * @param closeMode How to close the IO reactor.
+     * @param timeout  How long to wait for the IO reactor to close gracefully.
+     * @since 5.2
+     */
+    public void close(final CloseMode closeMode, final Timeout timeout) {
         if (closeMode == CloseMode.GRACEFUL) {
             initiateShutdown();
             try {
-                awaitShutdown(TimeValue.ofSeconds(5));
+                awaitShutdown(timeout);
             } catch (final InterruptedException e) {
                 Thread.currentThread().interrupt();
             }