|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/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] [email protected]
-Status: Open
+Status: Assigned
-Assigned To:
+Assigned To: cataphract
[2010-12-22 16:43 UTC] [email protected]
[2010-12-22 17:47 UTC] [email protected]
[2010-12-23 02:44 UTC] [email protected]
[2010-12-23 02:45 UTC] [email protected]
-Status: Assigned
+Status: Closed
[2010-12-23 02:45 UTC] [email protected]
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Dec 31 03:00:01 2025 UTC |
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