Thank you for your answer. I try to add D_THREAD_SAFE and it's really work.
Thanks a lot.

Best reagrds,
Aidar.

2012/10/16 Andy Polyakov via RT <r...@openssl.org>

> >> When I try to connect by https from AIX to another host from
> multi-thread
> >> application by curl, I have got error message SSL_CONNECT_ERROR "Unknown
> >> SSL protocol error in connection to ...". After debugging I have found
> in
> >> bss_sock.c file in BIO_sock_should_retry function ifdef statement (#if
> >> defined(OPENSSL_SYS_WINDOWS) && 0), that incapsulate handling of
> >> non-blocking socket returns. I think so, because in sock_read function
> >> calling readsocket returns -1 and set errno to 0, and it' normal for
> >> non-blocking sockets.
> >
> > Why do you say that it's normal to return -1 and set errno to 0? For
> > non-blocking sockets or not? Even AIX manual says it should be set to
> > EAGAIN or EWOULDBLOCK. What is more likely to happen is that OpenSSL was
> > compiled without threads support. In this case error value will go to
> > thread-specific errno, while BIO_sock_should_retry would attempt to read
> > global errno presumably from main thread. In this case question is where
> > does your OpenSSL come from? Was it compiled without MT support? Why do
> > you use it in MT application? If it's not case, then it's rather AIX bug
> > than OpenSSL. The fact that removing #ifdef make the trick doesn't
> > change the fact that it's AIX bug.
> >
> > What's your 'openssl version -a'?
>
> There is another possibility and that is that -qthreaded passed to cc is
> not sufficient for enabling MT support on 5.3 [or even elsewhere]. In
> this case I'd suggest to see if configuring with additional
> -D_THREAD_SAFE flag solves the problem.
>
>
>

Thank you for your answer. I try to add D_THREAD_SAFE and it's really work. Thanks a lot.

Best reagrds,
Aidar.

2012/10/16 Andy Polyakov via RT <r...@openssl.org>
>> When I try to connect by https from AIX to another host from multi-thread
>> application by curl, I have got error message SSL_CONNECT_ERROR "Unknown
>> SSL protocol error in connection to ...". After debugging I have found in
>> bss_sock.c file in BIO_sock_should_retry function ifdef statement (#if
>> defined(OPENSSL_SYS_WINDOWS) && 0), that incapsulate handling of
>> non-blocking socket returns. I think so, because in sock_read function
>> calling readsocket returns -1 and set errno to 0, and it' normal for
>> non-blocking sockets.
>
> Why do you say that it's normal to return -1 and set errno to 0? For
> non-blocking sockets or not? Even AIX manual says it should be set to
> EAGAIN or EWOULDBLOCK. What is more likely to happen is that OpenSSL was
> compiled without threads support. In this case error value will go to
> thread-specific errno, while BIO_sock_should_retry would attempt to read
> global errno presumably from main thread. In this case question is where
> does your OpenSSL come from? Was it compiled without MT support? Why do
> you use it in MT application? If it's not case, then it's rather AIX bug
> than OpenSSL. The fact that removing #ifdef make the trick doesn't
> change the fact that it's AIX bug.
>
> What's your 'openssl version -a'?

There is another possibility and that is that -qthreaded passed to cc is
not sufficient for enabling MT support on 5.3 [or even elsewhere]. In
this case I'd suggest to see if configuring with additional
-D_THREAD_SAFE flag solves the problem.



Reply via email to