Bugfix - OpenSSL read/write hangs in windows when timeout not set. #1033
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
A bug was identified with the pull request #971 that was merged Friday (Fix 61285 - SSL connections do not timeout ). When compiled and run under Windows, the OpenSSL reads hang even after server socket close due to an infinite loop in the php_openssl_sockop_io() function. (noted when running test case ext/openssl/tests/bug65538_001.phpt)
In this method, the operation is retried when the socket read/write returns an errno of EAGAIN and the SSL error code is SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE. While this worked under Linux, it was incorrect. The current loop should only continue if the errno is EAGAIN and the current operation (read or write) matches the WANT ssl error code (i.e. the operation is read and the ssl error code is SSL_ERROR_WANT_READ ). Otherwise, the operation should exit with the bytes currently in the buffer and the calling method should be allowed to continue processing.
I tested this fix on Windows 7, with PHP compiled using Visual Studio 2012, and in Ubuntu Server 12.2. I ran the entire openssl test suite on both environments, and ran additional tests to ensure operation.