Iñaki Baz Castillo
3/26/2008 10:49:00 PM
El Mi=C3=A9rcoles, 26 de Marzo de 2008, John Carter escribi=C3=B3:
> Hmm.From the "man select" page...
>
> timeout is an upper bound on the amount of time elapsed before
> select() returns. It may be zero, causing select() to return
> immediately. (This is useful for polling.) If timeout is NULL
> (no timeout), select() can block indefinitely.
>
> My guess is you have one too few nil's in there and the default timeout is
> 0 not nil.
Yes, true, with "strace" I see:
=2E..
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
select(4, [3], [], [], {0, 0}) =3D 0 (Timeout) <---
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
sigprocmask(SIG_BLOCK, NULL, []) =3D 0
=2E..
but I've tryed with all the values in the 4=C2=BA parameter of "IO.select":
IO.select([io], nil, nil, 0)
IO.select([io], nil, nil, nil)
IO.select([io], nil, nil, X)
and nothing changes, in all cases I see the same with "strace". =C2=BF?=C2=
=BF
> to discover why linux is such a great place to develop on.... you can
> _always_ find out what is really going on with any program.
Sure I use Linux... what else? XD
> As a little side comment... You can _always_ take a program written
> around a select & state machine and make it multi-threaded doing
> blocking I/O or conversely refactor a multi-threaded app into a select
> based state machine.
Of course I need to read a lot about IO methods :)
Thanks a lot.
=2D-=20
I=C3=B1aki Baz Castillo