Skip to content

Remove SocketsHttpConnectionFactory #40075

@scalablecory

Description

@scalablecory

SocketsHttpConnectionFactory was proposed as part of #1793.

Its original intent was to provide a number of callbacks for users to customize things without understanding all of the ConnectionFactory stuff. However, API review removed all of these callbacks, making this class largely redundant with SocketsConnectionFactory.

The only remaining features it has are:

  • it pulls the HttpRequestMessage out of the property bag for the user.
  • it turns Nagle off.

We should consider reducing our API surface by doing the following:

  • Remove SocketsHttpConnectionFactory.
  • Update SocketsConnectionFactory to default its sockets with Nagle off.
    • This may cause some confusion to people expecting the default Socket behavior. But, it may be okay to be opinionated here, and most experts end up turning it off anyway.
  • Update the DnsEndPointWithProperties type to expose an HttpRequestMessage property.

Old usage example:

class MyCustomFactory : SocketsHttpConnectionFactory
{
    public override ValueTask<Connection> EstablishConnectionAsync(HttpRequestMessage message, EndPoint endPoint, IConnectionProperties properties, CancellationToken cancellationToken)
    {
       // ...
    }
}

New usage example:

class MyCustomFactory : SocketsConnectionFactory
{
    public override ValueTask<Connection> ConnectAsync(EndPoint endPoint, IConnectionProperties properties, CancellationToken cancellationToken)
    {
        if(!properties.TryGet(out HttpRequestMessage message)) throw new Exception("Expected HttpRequestMessage property");
        // ...
    }
}

CC @geoffkizer @karelz this came about from a discussion with @stephentoub. I feel we can treat this as low priority, but it is a low-effort way to improve API surface.

Metadata

Metadata

Assignees

Labels

area-System.Net.HttpenhancementProduct code improvement that does NOT require public API changes/additions

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions