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 可以是一个 String 或一个 InternetAddress。如果 address 是一个 Stringbind 将执行 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"。可以通过 RawSecureServerSocket.selectedProtocol 获取选择的协议。

可选参数 shared 指定其他 RawSecureServerSocket 对象是否可以绑定到同一个 addressportv6Only 组合。如果 sharedtrue 并且 isolate 或其他 isolate 中有更多 RawSecureServerSocket 绑定到该端口,则进入的连接将在所有已绑定的 RawSecureServerSocket 之间分配。可以通过这种方式在多个 isolate 中分配连接。

实现

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));
}