private function close(Client $client)
{
$this->clear($client);
assert($client->isDead != Client::CLOSED_RDWR);
@fclose($client->socket);
$client->isDead = Client::CLOSED_RDWR;
$this->clientCount--;
$net = @\inet_pton($client->clientAddr);
if (isset($net[4])) {
$net = substr($net, 0, 7);
}
$this->clientsPerIP[$net]--;
assert($this->logDebug("close {$client->clientAddr}:{$client->clientPort}"));
if ($client->bodyPromisors) {
$ex = new ClientException();
foreach ($client->bodyPromisors as $promisor) {
$promisor->fail($ex);
}
}
if ($client->bufferPromisor) {
$ex = $ex ?? new ClientException();
$client->bufferPromisor->fail($ex);
}
}