bind 静态方法

Future<SecureServerSocket> 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 getter 获取。

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

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

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

要请求或要求客户端通过提供SSL(TLS)客户端证书进行认证,将可选参数 requestClientCertificaterequireClientCertificate 设置为 true。要求证书隐含着请求证书,因此同时设置两者是多余的。在连接后检查 SecureSocket.peerCertificate 来确定是否收到了客户端证书。如果没有收到证书,结果将为 null。

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

可选参数 shared 指定是否额外的 SecureServerSocket 对象可以绑定到相同的 addressportv6Only 组合。如果 sharedtrue 且来自此隔离区或其他隔离区的更多 SecureServerSocket 绑定到相同端口,则传入的连接将分布在所有已绑定的 SecureServerSocket 上。可以通过这种方式将连接分布到多个隔离区。

实现

static Future<SecureServerSocket> 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 RawSecureServerSocket.bind(address, port, context,
          backlog: backlog,
          v6Only: v6Only,
          requestClientCertificate: requestClientCertificate,
          requireClientCertificate: requireClientCertificate,
          supportedProtocols: supportedProtocols,
          shared: shared)
      .then((serverSocket) => new SecureServerSocket._(serverSocket));
}