>> 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.


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to