Using select(2) to wait for connect(2)
Alexander Dupuy
dupuy at amsterdam.columbia.edu
Wed Nov 26 13:07:49 AEST 1986
In article <46 at otc.OZ> adjg at otc.OZ (Andrew Gollan) writes:
>I need to have a server that forms a junction between two client
>processes. Further if one of the clients is not present the other must
>still be serviced. I read the manual on accept(2) and found that one
>could use select(2) to wait for incoming connections.
>...
> if (select(2, &mask, (int *)0, (int *)0, 0) < 0)
>...
>The problem:
> The select in the server never returns.
>...
>The questions:
> Am I doing something horribly wrong or is it that select(2)
> does not perform as documented? Have I missed something in the
> documentation?
The answer:
Select(2) does perform as documented. You missed the note which
describes the timeout (last) argument to select. "If timeout is a zero pointer
the select blocks indefinitely. To effect a poll, the timeout argument should
be non-zero, pointing to a zero valued timeval structure."
You want to "effect a poll" like this:
struct timeval poll = { 0, 0 };
if (select(2, &mask, (int *) 0, (int *)0, &poll) < 0)
perror ("etc...
@alex
----
arpa: dupuy at columbia.edu
uucp: ...!seismo!columbia!dupuy
More information about the Comp.unix.questions
mailing list