On Thu, Aug 07, 2003 at 02:43:12PM -0400, Allison, Jason (JALLISON) wrote:
>    if (scalar(@ReadyHandles) > 0)
>    {
> ...
>    else
>    {
>       if (! $ERRNO)
>       {
> ...
>       }
>       else
>       {
>          # Error on select() call
>          unless ($ERRNO == EINTR)
>          {
> ...
> 
> Somehow ERRNO is getting set differently using 5.8.0.  Even 
> more strange, the package works great using the Tk debugger 
> and 5.8.0.  So here I am trying to learn a few things:  How 
> ERRNO works, and why our team chose to use ERRNO when checking 
> the handles.

They screwed up.

You can't use $! to test for success/failure because successful
system calls *don't clear it*.  This means that you have to check
the return value first and check $! once you know that the call
failed.

That's what perlvar means when it says:

    $!  If used numerically, yields the current value of the C
        "errno" variable, with all the usual caveats.  (This
        means that you shouldn't depend on the value of "$!" to
        be anything in particular unless you've gotten a specific
        error return indicating a system error.)

And my errno(3) manpage says:

    The integer errno is set by system calls (and some library
    functions) to indicate what went wrong.  Its value is sig-
    nificant only when the call returned an error (usually -1),
    and a library function that does succeed is allowed to 
    change errno.

-- 
Steve

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to