public function create(string $host, int $port) : PromiseInterface { $sslContext = $this->context['ssl'] ?? []; $this->context['ssl'] = $sslContext + ['SNI_enabled' => true, 'SNI_server_name' => $host, 'peer_name' => $host]; return $this->connector->create($host, $port)->then(function (Stream $stream) use($host) { // (unencrypted) TCP/IP connection succeeded // set required SSL/TLS context options $resource = $stream->getStream(); stream_context_set_option($stream->getStream(), $this->context); // try to enable encryption return $this->streamEncryption->enable($stream)->then(null, function ($error) use($stream) { // establishing encryption failed => close invalid connection and return error $stream->close(); throw $error; }); }); }
public function create(string $host, int $port) : PromiseInterface { return $this->resolveHostname($host)->then(function ($address) use($port) { return $this->connector->create($address, $port); }); }