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/s8/plugins/pm5-prometheus.phar/src/pmexporter/Metric, int 42)
#1 plugins/pm5-prometheus.phar/src/pmexporter/MetricsServer(42): socket_bind(object Socket#73307, string[7] 0.0.0.0, int 49140)
#2 plugins/pm5-prometheus.phar/src/pmexporter/MetricsLoader(21): pmexporter\MetricsServer->__construct(int 49140, object pocketmine\utils\MainLogger#6, object pocketmine\snooze\SleeperHandlerEntry#73309)
#3 pmsrc/src/plugin/PluginBase(119): pmexporter\MetricsLoader->onEnable()
#4 pmsrc/src/plugin/PluginManager(456): pocketmine\plugin\PluginBase->onEnableStateChange(true)
#5 pmsrc/src/Server(1449): pocketmine\plugin\PluginManager->enablePlugin(object pmexporter\MetricsLoader#43719)
#6 pmsrc/src/Server(1067): pocketmine\Server->enablePlugins(object pocketmine\plugin\PluginEnableOrder#50799)
#7 pmsrc/src/PocketMine(341): pocketmine\Server->__construct(object pocketmine\thread\ThreadSafeClassLoader#3, object pocketmine\utils\MainLogger#6, string[24] /home/anmine/servers/s8/, string[32] /home/anmine/servers/s8/plugins/)
#8 pmsrc/src/PocketMine(364): pocketmine\server()
#9 pmsrc(11): require(string[61] phar:///home/anmine/servers/s8/InCore.phar/src/PocketMine.php)