Annotation of embedaddon/php/ext/openssl/tests/bug48182.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: #48182,ssl handshake fails during asynchronous socket connection
3: --SKIPIF--
4: <?php
5: if (!extension_loaded("openssl")) die("skip, openssl required");
6: if (!extension_loaded("pcntl")) die("skip, pcntl required");
7: if (OPENSSL_VERSION_NUMBER < 0x009070af) die("skip");
8: ?>
9: --FILE--
10: <?php
11:
12: function ssl_server($port) {
13: $host = 'ssl://127.0.0.1'.':'.$port;
14: $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
15: $data = "Sending bug48182\n";
16:
17: $pem = dirname(__FILE__) . '/bug46127.pem';
18: $ssl_params = array( 'verify_peer' => false, 'allow_self_signed' => true, 'local_cert' => $pem);
19: $ssl = array('ssl' => $ssl_params);
20:
21: $context = stream_context_create($ssl);
22: $sock = stream_socket_server($host, $errno, $errstr, $flags, $context);
23: if (!$sock) return false;
24:
25: $link = stream_socket_accept($sock);
26: if (!$link) return false; // bad link?
27:
28: $r = array($link);
29: $w = array();
30: $e = array();
31: if (stream_select($r, $w, $e, 1, 0) != 0)
32: $data .= fread($link, 8192);
33:
34: $r = array();
35: $w = array($link);
36: if (stream_select($r, $w, $e, 1, 0) != 0)
37: $wrote = fwrite($link, $data, strlen($data));
38:
39: // close stuff
40: fclose($link);
41: fclose($sock);
42:
43: exit;
44: }
45:
46: function ssl_async_client($port) {
47: $host = 'ssl://127.0.0.1'.':'.$port;
48: $flags = STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT;
49: $data = "Sending data over to SSL server in async mode with contents like Hello World\n";
50:
51: $socket = stream_socket_client($host, $errno, $errstr, 10, $flags);
52: stream_set_blocking($socket, 0);
53:
54: while ($socket && $data) {
55: $wrote = fwrite($socket, $data, strlen($data));
56: $data = substr($data, $wrote);
57: }
58:
59: $r = array($socket);
60: $w = array();
61: $e = array();
62: if (stream_select($r, $w, $e, 1, 0) != 0)
63: {
64: $data .= fread($socket, 1024);
65: }
66:
67: echo "$data";
68:
69: fclose($socket);
70: }
71:
72: echo "Running bug48182\n";
73:
74: $port = rand(15000, 32000);
75:
76: $pid = pcntl_fork();
77: if ($pid == 0) { // child
78: ssl_server($port);
79: exit;
80: }
81:
82: // client or failed
83: sleep(1);
84: ssl_async_client($port);
85:
86: pcntl_waitpid($pid, $status);
87:
88: ?>
89: --EXPECTF--
90: Running bug48182
91: Sending bug48182
92: Sending data over to SSL server in async mode with contents like Hello World
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>