Re: kernel error in system call accept() under kernel 2.6.8

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 5 Oct 2005, Peter Duellings wrote:

> Alan,
>
> meanwhile we could generate a strace for the problem.
> However, I guess that the strace does not give the desired
> information (see parts below).
>
> Additionally we added in the program the output of the return
> value of the accept() system call . The return value is -512
> and the errno value is 0!
> Usually the return value should be -1 and the errno  should
> contain the value without the sign of the error.
>
>
> Any idea or comment on this ?
>
> Thanks,
>

If you run an ordinary 'C' runtime library, not something
that you wrote to interface with the kernel, then a return
value of -512 with a 0 errno value is not possible unless
you have code that is trashing something in user-space.

The interface, whether a sys-call or an interrupt, takes
the return value, negates it, and puts it into errno if
it was negative, then it sets the return value to -1.
This is common code for all system-calls, therefore
nothing you can turn off for a particular system call.

A possible problem may be that you are not using the
proper 'C' runtime library headers to define what
errno actually is. On many (most) runtime libraries
'errno' is NOT 'extern int errno'. Instead it is
actually a de-reference of the return-value of a
function that located the proper variable for your
particular thread! You can't create your own global
errno and have it magically updated.

>
> Peter Düllings
>
> ---------<strace>------------
> 2682  09:25:29.238663 accept(21,  <unfinished ...>
> 2688  09:25:29.263486 accept(33, {sa_family=AF_INET, sin_port=htons(32811),
> sin_addr=inet_addr("127.0.0.1")}, [16]) = 40 <27.171270>
> 2688  09:25:56.589969 accept(33, 0x82fa7e0, [16]) = ? ERESTARTSYS (To be
> restarted) <0.385453>
> 2688  09:25:56.975563 --- SIGCHLD (Child exited) @ 0 (0) ---
> 2688  09:25:56.975676 accept(33, 0x82fa7e0, [16]) = ? ERESTARTSYS (To be
> restarted) <0.205963>
> 2688  09:25:57.181770 --- SIGCHLD (Child exited) @ 0 (0) ---
> 2688  09:25:57.181842 accept(33,  <unfinished ...>
> 2682  09:25:57.231961 <... accept resumed> {sa_family=AF_INET,
> sin_port=htons
> (32882), sin_addr=inet_addr("127.0.0.1")}, [16]) = 43 <27.993066>
> 2682  09:25:57.234320 accept(21,  <unfinished ...>
> 2688  09:25:57.538314 <... accept resumed> 0x82fa7e0, [16]) = ? ERESTARTSYS
> (To be restarted) <0.356435>
> 2688  09:25:57.538429 --- SIGCHLD (Child exited) @ 0 (0) ---
> 2688  09:25:57.538488 accept(33, 0x82fa7e0, [16]) = ? ERESTARTSYS (To be
> restarted) <0.015688>
> 2688  09:25:57.554315 --- SIGCHLD (Child exited) @ 0 (0) ---
> 2688  09:25:57.554370 accept(33, 0x82fa7e0, [16]) = ? ERESTARTSYS (To be
> restarted) <0.192660>
> 2688  09:25:57.747151 --- SIGCHLD (Child exited) @ 0 (0) ---
> 2688  09:25:57.747236 accept(33, 0x82fa7e0, [16]) = ? ERESTARTSYS (To be
> restarted) <0.097813>
> ....
> .
> ---------</strace>------------
>
>
>
> Alan Cox wrote:
>
>> On Maw, 2005-09-20 at 16:25 +0200, Peter Duellings wrote:
>>
>>> Obviously there are some cases where the accept() system call does
>>> not set the errno variable if the accept() system call returns
>>> with a value less than zero:
>>
>>
>> Not actually possible. The kernel returns a positive value, zero or a
>> negative value which is the errno code negated. It has no mechanism to
>> return a negative value and not error.
>>
>> What does strace show for the failing case ?
>>

Cheers,
Dick Johnson
Penguin : Linux version 2.6.13 on an i686 machine (5589.55 BogoMips).
Warning : 98.36% of all statistics are fiction.

****************************************************************
The information transmitted in this message is confidential and may be privileged.  Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited.  If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to [email protected] - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux