[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [ProgSoc] programming a server
On Sun, 3 Jun 2001, Paul Cameron wrote:
> On Wed, May 30, 2001 at 05:56:31PM +1000, Matt wrote:
> >
> > On Wed, May 30, 2001 at 05:47:47PM +1000, vik wrote:
> > > My question is, what would be a nice way to limit the number of
> > > connections? atm I have a counter which is incremented each time a
> > > child is spawned, and when this reaches a certain number, the parent
> > > waits for any child to finish (via the wait() fn). However, this
> > > means the parent only waits when the number of children is at its
> > > limit, which is kinda messy. Also, I can't b stuffed learning about
> > > signals. any ideas?
> >
> > have a look at wait4() or waitpid(). waitpid() is a part of SuS as i
> > understand it but wait4() only exists in BSD and Linux. both these
> > functions allow you to check for children without blocking so you can
> > do it as soon as you have more than 1 child. also learning about
> > signals is a core competancy in unix. without it it is very difficult
> > to write good interactive code.
Specifically, it's the WNOHANG option. :)
> Ok, I have a sort of related question, for coding styles that work ...
>
> When working with synchronous comms using a select()/poll() model,
> how do you handle slow syscalls? That is to say, how do you deal with
> syscall failure caused by signals (be they SIGCHLD or SIGPIPE)?
>
Which syscalls are you referring to in particular? BTW, most syscalls that
sends a SIGPIPE signal also return EPIPE in the errno. (which means that
you can block sigpipe and just check errno instead)
> Possibilities:
> o) Deal with the signals on an ad hoc basis
> o) block all signals when in a block performing many syscalls,
> perhaps longjmp on errors (sigprocmask and friends)
> o) change the semantics of 'slow' syscalls (?? i think I read this
> somewhere, but don't remember, perhaps it was a strange dream)
>
> And do you prefer select() or poll()? Is using either computationally
> more intensive?
>
Poll is known to be slightly faster on Linux/glibc systems. (where poll is
implemented in the kernel, compared to poll() emulation)
cheers,
Dave
-
You are subscribed to the progsoc mailing list. To unsubscribe, send a
message containing "unsubscribe" to progsoc-request@nospam.progsoc.uts.edu.au.
If you are having trouble, ask owner-progsoc@nospam.progsoc.uts.edu.au for help.