У меня есть аппаратное устройство отслеживания, и я слушаю его с помощью PHP-сокетов.Я запускаю файл сокета как файл демона, что означает, что скрипт работает вечно.Но после запуска какое-то время я получаю эту ошибку
Сброс соединения по пиру
Я использую этот сокет Library https://github.com/navarr/Sockets и для запуска файлав качестве демона я использую навсегда
После некоторого запуска я получаю эту ошибку
<br />
<b>Fatal error</b>: Uncaught exception 'Navarr\Socket\Exception\SocketException' with message 'Connection reset by peer' in /var/www/html/tracker2/src/Socket.php:685
Stack trace:
#0 /var/www/html/tracker2/src/Socket.php(532): Navarr\Socket\Socket::exceptionOnFalse(Resource id #10117, Object(Closure))
#1 /var/www/html/tracker2/src/Server.php(236): Navarr\Socket\Socket->read(1024, 2)
#2 /var/www/html/tracker2/src/Server.php(202): Navarr\Socket\Server->read(Object(Navarr\Socket\Socket))
#3 /var/www/html/tracker2/src/Server.php(158): Navarr\Socket\Server->loopOnce()
#4 /var/www/html/tracker2/socket.php(33): Navarr\Socket\Server->run()
#5 /var/www/html/tracker2/socket.php(96): EchoServer->__construct('172.xx.xx.xxx')
#6 {main}
thrown in <b>/var/www/html/tracker2/src/Socket.php</b> on line <b>685</b><br />
error: Forever detected script exited with code: 255
error: Script restart attempt #1
<br />
<b>Fatal error</b>: Uncaught exception 'Navarr\Socket\Exception\SocketException' with message 'Address already in use' in /var/www/html/tracker2/src/Socket.php:685
Stack trace:
#0 /var/www/html/tracker2/src/Socket.php(138): Navarr\Socket\Socket::exceptionOnFalse(Resource id #28, Object(Closure))
#1 /var/www/html/tracker2/src/Server.php(136): Navarr\Socket\Socket->bind('172.xx.xx.xxx', 8153)
#2 /var/www/html/tracker2/socket.php(20): Navarr\Socket\Server->__construct('172.xx.xx.xxx', 8153)
#3 /var/www/html/tracker2/socket.php(96): EchoServer->__construct('172.xx.xx.xxx')
#4 {main}
thrown in <b>/var/www/html/tracker2/src/Socket.php</b> on line <b>685</b><br />
error: Forever detected script exited with code: 255
Я хочу точно знать, что является причиной этой ошибки.Я не хочу, чтобы мой сценарий остановился.почему я получаю сообщение об ошибке сброса соединения по пиру.Как я могу это исправить
Если не существует решения, чтобы исправить сброс соединения по peer , тогда есть ли вероятность, что я смогу запустить скрипт снова через 5 минут после получения ошибки Сброс соединения по пиру .
почему 5 минут - потому что сокет переходит в стадию ожидания, а когда вечно пытаются запустить снова скрипт, он говорит, что адрес уже используется
Код:
<?php
use Navarr\Socket\Socket;
use Navarr\Socket\Server;
class EchoServer extends Server
{
const DEFAULT_PORT = 7;
public function __construct($ip = null, $port = self::DEFAULT_PORT)
{
parent::__construct($ip, $port);
$this->addHook(Server::HOOK_CONNECT, array($this, 'onConnect'));
$this->addHook(Server::HOOK_INPUT, array($this, 'onInput'));
$this->addHook(Server::HOOK_DISCONNECT, array($this, 'onDisconnect'));
$this->run();
}
public function onConnect(Server $server, Socket $client, $message)
{
echo 'Connection Established',"\n";
}
public function onInput(Server $server, Socket $client, $message)
{
echo 'Received "',$message,'"',"\n";
$client->write($message, strlen($message));
}
public function onDisconnect(Server $server, Socket $client, $message)
{
echo 'Disconnection',"\n";
}
}
Так какошибка появляется в строке № 685 ниже приведена та функция, которая записана в Socket.php файл
protected static function exceptionOnFalse($resource, callable $closure)
{
$result = $closure($resource);
if ($result === false) {
throw new SocketException($resource);
}
return $result;
}