Php WebSocket握手

I create a secure websocket server with stream_socket_server. And i'd like to have a function accept that sequencially get the connections and do the handshake as a blocking access. With chrome, it connects and deconnects and with Firefox it tells me that there's an error with fread. The snippet is :

    $write = null;
    $except = null;
    $sockets = $this->socket;
    @stream_select( $sockets, $write, $except, 0 );         
    foreach( $sockets as $socket ) {        
        $resource = @stream_socket_accept( $socket );
        if (!$resource) {
            return false;
        }
            $accepts = array( $resource );          
            @stream_select( $accepts, $write, $except, 0, 1000 );
            foreach( $accepts as $accepted ) {

                $buffer = ''; 
                $bytes_to_read = 8192;
                while ( $chunk = fread( $accepted, $bytes_to_read ) ) {
                    $buffer .= $chunk;
                    $status = stream_get_meta_data( $accepted );
                    $bytes_to_read = $status[ "unread_bytes" ];
                    if ( strlen( $buffer ) === 1 ) 
                        $bytes_to_read = 8192;
                }

                    $response = HandShake::perform( $buffer );      
                    $responseLength = strlen( $response );
                    for( $written = 0; $written < $responseLength; $written += $fwrite ) {
                        $fwrite = fwrite( $accepted, substr( $response, $written ) );           
                        if ( ( $fwrite === false ) || ( $fwrite === 0 ) ) {
                                stream_socket_shutdown( $accepted, STREAM_SHUT_RDWR );
                                return false;
                        }       
                    }   
            }
    }

Can you tell me why it doesn't work and transform my snippet ?