PHP :: Bug #53592 :: stream_socket_enable_crypto() uses NONBLOCK
| Bug #53592 | stream_socket_enable_crypto() uses NONBLOCK | ||||
|---|---|---|---|---|---|
| Submitted: | 2010-12-22 04:06 UTC | Modified: | 2010-12-23 02:45 UTC | ||
| From: | jerry dot wilborn at paetec dot com | Assigned: | cataphract (profile) | ||
| Status: | Closed | Package: | Sockets related | ||
| PHP Version: | 5.3.4 | OS: | CentOS 4.4 | ||
| Private report: | No | CVE-ID: | None | ||
[2010-12-22 04:06 UTC] jerry dot wilborn at paetec dot com
Description:
------------
stream_socket_enable_crypto() changes the stream to NONBLOCK before it attempts
the encryption. I'm assuming this is so the timeout can be tracked, but for
connections where the handshake doesn't work the process simply chews up CPU while
the read() repeatedly EAGAIN fails and gettimeofday() is called.
Test script:
---------------
$stream = stream_socket_client("tcp://72.14.204.147:80", $errno, $errstr, 5);
stream_socket_enable_crypto($stream, TRUE, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
Expected result:
----------------
For the socket to stay in blocked mode.
Actual result:
--------------
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(80),
sin_addr=inet_addr("72.14.204.147")}, 16) = -1 EINPROGRESS (Operation now in
progress)
poll([{fd=3, events=POLLIN|POLLOUT|POLLERR|POLLHUP, revents=POLLOUT}], 1, 1000) =
1
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
fcntl64(3, F_SETFL, O_RDWR) = 0
select(4, [3], [3], [], {5, 0}) = 1 (out [3], left {5, 0})
fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2010-12-22 14:59 UTC] jerry dot wilborn at paetec dot com
-Summary: stream_socket_client uses NONBLOCK +Summary: stream_socket_enable_crypto() uses NONBLOCK
[2010-12-22 14:59 UTC] jerry dot wilborn at paetec dot com
[2010-12-22 16:21 UTC] cataphract@php.net
-Status: Open +Status: Assigned -Assigned To: +Assigned To: cataphract
[2010-12-22 16:43 UTC] cataphract@php.net
[2010-12-23 02:45 UTC] cataphract@php.net