> 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.

Yeah, it's a little confusing for C-Programmers, but I think it is OK to
do it in this way. The manual extra points a big note, that naming is
like in C, but the behaviour can be completely different.
Reverting the removing of the fd_* functions would actually more confuse
the users (again) then leaving a note in the manual ...

Just my 0,02$

Greetings,
Marcel Beerta



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

Reply via email to