# Microsoft.AspNetCore.Connections.Experimental

``` diff
+namespace Microsoft.AspNetCore.Connections.Experimental {
+    public interface IMultiplexedConnectionBuilder {
+        IServiceProvider ApplicationServices { get; }
+        MultiplexedConnectionDelegate Build();
+        IMultiplexedConnectionBuilder Use(Func<MultiplexedConnectionDelegate, MultiplexedConnectionDelegate> middleware);
+    }
+    public interface IMultiplexedConnectionFactory {
+        ValueTask<MultiplexedConnectionContext> ConnectAsync(EndPoint endpoint, IFeatureCollection features = null, CancellationToken cancellationToken = default(CancellationToken));
+    }
+    public interface IMultiplexedConnectionListener : IAsyncDisposable {
+        EndPoint EndPoint { get; }
+        ValueTask<MultiplexedConnectionContext> AcceptAsync(IFeatureCollection features = null, CancellationToken cancellationToken = default(CancellationToken));
+        ValueTask UnbindAsync(CancellationToken cancellationToken = default(CancellationToken));
+    }
+    public interface IMultiplexedConnectionListenerFactory {
+        ValueTask<IMultiplexedConnectionListener> BindAsync(EndPoint endpoint, IFeatureCollection features = null, CancellationToken cancellationToken = default(CancellationToken));
+    }
+    public class MultiplexedConnectionBuilder : IMultiplexedConnectionBuilder {
+        public MultiplexedConnectionBuilder(IServiceProvider applicationServices);
+        public IServiceProvider ApplicationServices { get; }
+        public MultiplexedConnectionDelegate Build();
+        public IMultiplexedConnectionBuilder Use(Func<MultiplexedConnectionDelegate, MultiplexedConnectionDelegate> middleware);
+    }
+    public abstract class MultiplexedConnectionContext : BaseConnectionContext, IAsyncDisposable {
+        protected MultiplexedConnectionContext();
+        public abstract ValueTask<ConnectionContext> AcceptAsync(CancellationToken cancellationToken = default(CancellationToken));
+        public abstract ValueTask<ConnectionContext> ConnectAsync(IFeatureCollection features = null, CancellationToken cancellationToken = default(CancellationToken));
+    }
+    public delegate Task MultiplexedConnectionDelegate(MultiplexedConnectionContext connection);
+}
```

