Почему сокет в объекте имеет значение 0
Я создаю многопоточный сервер, и я застрял на этой проблеме. Чтобы принимать и обрабатывать соединения, я использую socket_accept, а затем создаю объект Connection, добавляю его в массив и затем выбираю весь массив. Но по какой-то причине, когда я делаю $connection::read (который выполняет socket_read), сокет в этих объектах становится равным 0. Но когда объект создан, все в порядке, выгрузка сокета возвращает ресурс, но выгрузка этого сокета в чтение () выдает предупреждения, потому что сокет равен 0. Вот некоторый код
ThreadedServer, run()
while ($this->enabled){
foreach ($this->connections as $connection){
/** @var $connection Connection */
$msg = $connection->read(); //here it's already 0, and i'm getting many warnings
if($msg){
//todo
}
}
if (($clientSocket = socket_accept($this->socket))) {
socket_getpeername($clientSocket, $addr, $port);
$this->connections[$hash = self::hash($addr, $port)] = new Connection($clientSocket, $addr, $port, $this);
$this->logger->info("New connection accepted: $hash");
}
}
Connection, in same thread with the ThreadedServer
public function __construct($socket, string $address, int $port, ThreadedServer $server)
{
$this->socket = $socket;
//socket_set_nonblock($this->socket); //not needed?
var_dump($this->socket); //here it returns 'resource'
$this->server = $server;
$this->lastUpdate = microtime(true);
$this->address = $address;
$this->port = $port;
}
public function read(){
var_dump($this->socket); //here it returns 'int (0)'
return socket_read($this->socket, 1024);
}