libcurl/7.20.1 OpenSSL/0.9.8g zlib/1.2.3.3
Performing an https request using a curl multi handle and using select or epoll to wait for events results in a hang.
It appears that the cause is the fix for bug #2958179, which makes ossl_connect_common unconditionally return from the step 2 loop when fetching from a multi handle.
When ossl_connect_step2 has completed, it updates connssl->connecting_state to ssl_connect_3.
ossl_connect_common will then return to the caller, as a multi handle is in use.
Eventually, the client code will call curl_multi_fdset to obtain an updated fdset to select or epoll on.
For https requests, curl_multi_fdset will cause https_getsock to be called.
https_getsock will only return a socket handle if the connecting_state is ssl_connect_2_reading or ssl_connect_2_writing.
Therefore, the client will never obtain a valid fdset, and thus not drive the multi handle, resulting in a hang.
A patch to fix the above problem is attached.
Thanks for the report, this problem is now fixed in the git repository.
To try it out, you either checkout/update your git clone: http://curl.haxx.se/source.html
or you try tomorrow's daily snapshot: http://curl.haxx.se/snapshots/