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 属性来检索。

可选参数 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));
}