bind static method
Binds a handler to an address and port.
The address can either be a String or an InternetAddress. If
address is a String, bind will perform a InternetAddress.lookup
and use the first value in the list. To listen on the loopback adapter,
which will allow only incoming connections from the local host, use the
value InternetAddress.loopbackIPv4 or InternetAddress.loopbackIPv6.
To allow for incoming connection from the network use either one of the
values InternetAddress.anyIPv4 or InternetAddress.anyIPv6 to bind to
all interfaces or the IP address of a specific interface.
If port has the value 0, an ephemeral port will be chosen by the
system. The actual port used can be retrieved using the port getter when
the this server is started.
Incoming client connections are promoted to secure connections, using the
certificate and key set in securityContext.
The optional argument backlog can be used to specify the listen
backlog for the underlying OS listen setup. If backlog has the value
of 0 (the default) a reasonable value will be chosen by the system.
If requestClientCertificate is true, the server will request clients
to authenticate with a client certificate. The server will advertise the
names of trusted issuers of client certificates, getting them from a
SecurityContext, where they have been set using
SecurityContext.setClientAuthorities.
The optional argument shared specifies whether additional Server
objects can bind to the same combination of address, port and
v6Only. If shared is true and more Servers from this isolate or
other isolates are bound to the port, then the incoming connections will
be distributed among all the bound Servers. Connections can be
distributed over multiple isolates this way.
The optional argument logger specifies a logger for this Server
instance.
Implementation
static Future<Server> bind(
Handler handler,
Object address,
int port, {
SecurityContext? securityContext,
int backlog = 0,
bool v6Only = false,
bool requestClientCertificate = false,
bool shared = false,
Logger? logger,
}) async {
logger?.fine('Binding HTTP server...');
HttpServer httpServer;
if (securityContext != null) {
httpServer = await HttpServer.bindSecure(
address,
port,
securityContext,
backlog: backlog,
v6Only: v6Only,
requestClientCertificate: requestClientCertificate,
shared: shared,
);
} else {
httpServer = await HttpServer.bind(
address,
port,
backlog: backlog,
v6Only: v6Only,
shared: shared,
);
}
logger?.fine('Bound HTTP server.');
logger?.fine('Listening for requests...');
serveRequests(httpServer, handler, logger);
logger?.fine('Server started.');
return IOServer(
httpServer,
isSecure: securityContext != null,
logger: logger,
);
}