bind静态方法

Future<RawSecureServerSocket> bind(
  1. dynamic address,
  2. int port,
  3. SecurityContext? context, {
  4. int backlog = 0,
  5. bool v6Only = false,
  6. bool requestClientCertificate = false,
  7. bool requireClientCertificate = false,
  8. List<String>? supportedProtocols,
  9. bool shared = false,
})

监听提供的地址和端口。

当返回的Future完成时,服务器套接字绑定到给定的addressport,并开始监听。

address可以是StringInternetAddress。如果addressStringbind将执行InternetAddress.lookup并使用列表中的第一个值。要监听回环适配器,这将仅允许来自本地主机的入站连接,请使用InternetAddress.loopbackIPv4InternetAddress.loopbackIPv6的值。要从网络允许入站连接,请使用InternetAddress.anyIPv4InternetAddress.anyIPv6的其中一个值来绑定到所有接口或特定接口的IP地址。

如果port的值为0,系统将选择一个临时端口。实际使用的端口号可以使用port属性获取。

可选参数backlog可以用来指定底层OS监听设置的监听队列。如果backlog的值为0(默认值),系统将选择一个合理的值。

入站客户端连接将升级为安全连接,使用在context中设置的证书和密钥。

address必须以数字地址的形式给出,而不是主机名。

要请求或要求客户端通过提供SSL(TLS)客户端证书进行身份验证,将可选参数requestClientCertificate或requireClientCertificate设置为true。要求意味着请求,因此不需要指定两者。要检查是否收到客户端证书,请检查SecureSocket.peerCertificate连接后。如果没有收到证书,结果将为null。

supportedProtocols 是一个可选的协议列表(按优先级递减),用于在客户端的 ALPN 协议协商期间使用。示例值有 "http/1.1" 或 "h2"。所选协议可以通过 RawSecureSocket.selectedProtocol 获取。

可选参数 shared 指定是否允许额外的 RawSecureServerSocket 对象绑定到相同的 addressportv6Only 组合。如果 sharedtrue,并且此隔离区或其他隔离区的更多 RawSecureServerSocket 绑定了该端口,那么传入的连接将被分配给所有已绑定的 RawSecureServerSocket。可以通过这种方式在多个隔离区之间分配连接。

实现

static Future<RawSecureServerSocket> bind(
    address, int port, SecurityContext? context,
    {int backlog = 0,
    bool v6Only = false,
    bool requestClientCertificate = false,
    bool requireClientCertificate = false,
    List<String>? supportedProtocols,
    bool shared = false}) {
  return RawServerSocket.bind(address, port,
          backlog: backlog, v6Only: v6Only, shared: shared)
      .then((serverSocket) => new RawSecureServerSocket._(
          serverSocket,
          context,
          requestClientCertificate,
          requireClientCertificate,
          supportedProtocols));
}