33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
throw new Exception("Cannot create socket.");
}
$this->socket = $socket;
socket_set_option($this->socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_set_option($this->socket, SOL_SOCKET, SO_SNDTIMEO, ['sec' => 1, 'usec' => 0]);
socket_set_option($this->socket, SOL_SOCKET, SO_RCVTIMEO, ['sec' => 1, 'usec' => 0]);
if (!socket_bind($this->socket, "0.0.0.0", $port)) {
throw new Exception("Failed to bind to 0.0.0.0:" . $port);
}
socket_set_nonblock($this->socket);
socket_listen($this->socket);
$this->logger->info("Metrics server started on port " . $port);
}
public function shutdown(): void
{
#0 (): pocketmine\errorhandler\ErrorToExceptionHandler::handle(int 2, string[66] socket_bind(): Unable to bind address [98]: Address already in use, string[91] phar:///home/anmine/servers/s6/plugins/pm5-prometheus.phar/src/pmexporter/Metric, int 42)
#1 plugins/pm5-prometheus.phar/src/pmexporter/MetricsServer(42): socket_bind(object Socket#79774, string[7] 0.0.0.0, int 49138)
#2 plugins/pm5-prometheus.phar/src/pmexporter/MetricsLoader(21): pmexporter\MetricsServer->__construct(int 49138, object pocketmine\utils\MainLogger#6, object pocketmine\snooze\SleeperHandlerEntry#79771)
#3 pmsrc/src/plugin/PluginBase(119): pmexporter\MetricsLoader->onEnable()
#4 pmsrc/src/plugin/PluginManager(456): pocketmine\plugin\PluginBase->onEnableStateChange(true)
#5 pmsrc/src/Server(1465): pocketmine\plugin\PluginManager->enablePlugin(object pmexporter\MetricsLoader#78546)
#6 pmsrc/src/Server(1086): pocketmine\Server->enablePlugins(object pocketmine\plugin\PluginEnableOrder#56623)
#7 pmsrc/src/PocketMine(355): pocketmine\Server->__construct(object pocketmine\thread\ThreadSafeClassLoader#2, object pocketmine\utils\MainLogger#6, string[24] /home/anmine/servers/s6/, string[32] /home/anmine/servers/s6/plugins/)
#8 pmsrc/src/PocketMine(378): pocketmine\server()
#9 /home/anmine/servers/s6/InCore.phar(168): require(string[72] phar:///tmp/PocketMine-MP-phar-cache.0/PMMPmAuYvP.tar/src/PocketMine.php)