Message: 3 Date: Fri, 10 Jan 2014 15:27:10 +0100 From: Michal Trojnara Michal.Trojnara@mirt.net To: stunnel-users@stunnel.org Subject: Re: [stunnel-users] connect error 0 running on ARM platform Message-ID: 52D0033E.1060109@mirt.net Content-Type: text/plain; charset="iso-8859-1"; Format="flowed"
On 01/09/2014 06:02 PM, FX35 wrote:
Running stunnel 4.56 or 5.00 on an ARM platform (ARM926EJ) with Linux 2.6.36.4, I encounter the following error : the call to connect() return -1, but errno is set to 0 !
If stunnel is configured to use fork mode instead of pthread mode, the problem disapear.
So it seems there is a problem, cross-compiling the program, with errno or __errno_location() in the program generated with pthread.
I add the definition of _REENTRANT, without success ...
(See $H1 at http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html)
Is somebody meet the same error ?
The errno definition in the Android framework (as an example of Linux/ARM platform) is:
/* internal function returning the address of the thread-specific errno */ extern volatile int* __errno(void); /* a macro expanding to the errno l-value */ #define errno (*__errno())
It seems okay.
How do you reproduce this problem? What are the stunnel debug logs when it happens?
Mike
Hello Mike,
It seems that the errno variable is not correcly set/updated in C library, using pthread mode.
Sample:
errno = -1; ret = connect(...); if( ret == -1 ) { printf("errno=%d\n",errno); }
will displays value -1 for errno, not EINPROGRESS or EWOULDBLOCK !
errno is not updated ...
So errno doen't reflect the real value.
Map file of stunnel programm shows _errno_localion(), as you wrote.
Perhaps is there a bug in uClib ?
Here is the result of ldd command:
# ldd stunnel libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x400f3000) libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x4013d000) libz.so.1 => /usr/lib/libz.so.1 (0x4027c000) libdl.so.0 => /lib/libdl.so.0 (0x4029b000) libutil.so.0 => /lib/libutil.so.0 (0x4009e000) libpthread.so.0 => /lib/libpthread.so.0 (0x400a7000) libc.so.0 => /lib/libc.so.0 (0x402a6000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x400c6000) ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x4008f000)
Thanks for help.
Regards,
FWX.
FWX wrote:
errno is not updated ...
So errno doen't reflect the real value.
Map file of stunnel programm shows _errno_localion(), as you wrote.
Perhaps is there a bug in uClib ?
Something like this one: http://www.mail-archive.com/uclibc@uclibc.org/msg05640.html http://www.mail-archive.com/uclibc@uclibc.org/msg05641.html or: http://www.mail-archive.com/uclibc@uclibc.org/msg09301.html ?
It indeed looks like uclibc and stunnel use a different errno...
Mike