private function export(Client $client) : \Closure
{
$client->isDead = Client::CLOSED_RDWR;
$client->isExported = true;
$this->clear($client);
assert($this->logDebug("export {$client->clientAddr}:{$client->clientPort}"));
$net = @\inet_pton($client->clientAddr);
if (isset($net[4])) {
$net = substr($net, 0, 7);
}
$clientCount =& $this->clientCount;
$clientsPerIP =& $this->clientsPerIP[$net];
$closer = static function () use(&$clientCount, &$clientsPerIP) {
$clientCount--;
$clientsPerIP--;
};
assert($closer = (function () use($client, &$clientCount, &$clientsPerIP) {
$logger = $this->logger;
$message = "close {$client->clientAddr}:{$client->clientPort}";
return static function () use(&$clientCount, &$clientsPerIP, $logger, $message) {
$clientCount--;
$clientsPerIP--;
assert($clientCount >= 0);
assert($clientsPerIP >= 0);
$logger->log(Logger::DEBUG, $message);
};
})());
return $closer;
}