connectionFactory property

  1. @override
void connectionFactory=(Future<ConnectionTask<Socket>> f(Uri url, String? proxyHost, int? proxyPort)?)
override

Sets the function used to create socket connections.

The URL requested (e.g. through getUrl) and proxy configuration (f.proxyHost and f.proxyPort) are passed as arguments. f.proxyHost and f.proxyPort will be null if the connection is not made through a proxy.

Since connections may be reused based on host and port, it is important that the function not ignore f.proxyHost and f.proxyPort if they are not null. If proxies are not meaningful for the returned Socket, you can set findProxy to use a direct connection.

For example:

import "dart:io";

void main() async {
  HttpClient client = HttpClient()
    ..connectionFactory = (Uri uri, String? proxyHost, int? proxyPort) {
        assert(proxyHost == null);
        assert(proxyPort == null);
        var address = InternetAddress("/var/run/docker.sock",
            type: InternetAddressType.unix);
        return Socket.startConnect(address, 0);
    }
    ..findProxy = (Uri uri) => 'DIRECT';

  final request = await client.getUrl(Uri.parse("http://ignored/v1.41/info"));
  final response = await request.close();
  print(response.statusCode);
  await response.drain();
  client.close();
}

Implementation

@override
set connectionFactory(
        Future<ConnectionTask<Socket>> Function(
                Uri url, String? proxyHost, int? proxyPort)?
            f) =>
    innerClient.connectionFactory = f;