Andrei solved it.  It is because socket_select() mangles the passed arrays
so when you re-enter the call with the mangled $read array you are now
only checking the sockets that happened to trigger the first time through.

It means you actually have to do:

    $read = array($sock1,$sock2);
    $copy = $read;
    while($num=socket_select($copy, $write=NULL, $except=NULL, NULL)) {
        for($i=0; $i<$num; $i++) {
            usleep(500);
            $msg = socket_read($copy[$i],1024);
            echo "[$i] ".strlen($msg)."\n";
        }
        $copy = $read;
    }

So you save the original array of sockets to pass back in.  This is why
the C API has FD_ISSET() to check the result of a select().  I really
don't like this current behaviour of socket_select().  It will confuse the
hell out of anybody coming at this from a C background.

-Rasmus

On Sun, 2 Jun 2002, Philip Olson wrote:

> I only get [0], never [1].  Did about 40 tries.
>
>   latest CVS
>   ./configure --enable-sockets
>
> If you need more info, let me know.
>
> Regards,
> Philip Olson
>
>
>


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to