> Are non-blocking sockets really needed, given Ada's tasking
> abilities?

It depends on whether the tasking is implemented within a
single process (as did most early Ada compilers), in which
case the answer is Yes, or takes advantage of threads and/or
light weight processes (as do many current compilers), in
which the answer is No.

If the Ada program is implemented as a single OS process,
including the task scheduling code, when the Ada code makes a
blocking system call, the whole program is blocked, including
the task scheduling code.  There are some exceptions to this
in the way Unix signal handling works.  You might be able to
run a task scheduler on catching the signal, but you wouldn't
want to try to cheat and resume a task at this point.  It'd be
a little like trying to run a task at interrupt level.

--
Terry J. Westley, Principal Engineer
Calspan, An operation of Veridian
P.O. Box 400, Buffalo, NY 14225
[log in to unmask]    http://www.calspan.com