Почему сокет в объекте имеет значение 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);
    }


0 ответов

Другие вопросы по тегам