protected function serverTask(SocketServer $server, callable $callback) : \Generator { $socket = (yield $server->accept()); try { $result = $callback($this->raw ? $socket->getSocket() : $socket); if ($result instanceof \Generator) { yield from $result; } } finally { $socket->close(); } }