@@ -7,41 +7,45 @@ use function Async\spawn;
77use function Async \awaitAll ;
88use function Async \delay ;
99
10- echo "Start UDP basic operations test \n" ;
10+ $ output = [];
11+
12+ $ output ['1 ' ] = "Start UDP basic operations test " ;
13+
14+ $ address = null ;
1115
1216// Server coroutine
13- $ server = spawn (function () {
14- echo "Server: creating UDP socket \n " ;
15- $ socket = stream_socket_server ("udp://127.0.0.1:0 " , $ errno , $ errstr );
17+ $ server = spawn (function () use (& $ address , & $ output ) {
18+ $ output [ ' 2 ' ] = "Server: creating UDP socket " ;
19+ $ socket = stream_socket_server ("udp://127.0.0.1:0 " , $ errno , $ errstr, STREAM_SERVER_BIND );
1620 if (!$ socket ) {
17- echo "Server: failed to create socket: $ errstr\n " ;
21+ $ output [ ' 2a ' ] = "Server: failed to create socket: $ errstr " ;
1822 return ;
1923 }
2024
2125 $ address = stream_socket_get_name ($ socket , false );
22- echo "Server: listening on $ address \n" ;
26+ $ address = "udp:// $ address " ;
27+ $ output ['3 ' ] = "Server: listening on $ address " ;
2328
2429 // Wait for incoming data
25- echo "Server: waiting for UDP data \n " ;
30+ $ output [ ' 4 ' ] = "Server: waiting for UDP data " ;
2631 $ data = stream_socket_recvfrom ($ socket , 1024 , 0 , $ peer );
27- echo "Server: received ' $ data' from $ peer\n " ;
32+ $ output [ ' 6 ' ] = "Server: received ' $ data' from $ peer " ;
2833
2934 // Send response back
3035 $ response = "Hello from UDP server " ;
3136 $ bytes = stream_socket_sendto ($ socket , $ response , 0 , $ peer );
32- echo "Server: sent $ bytes bytes response \n " ;
37+ $ output [ ' 7 ' ] = "Server: sent $ bytes bytes response " ;
3338
3439 fclose ($ socket );
3540 return $ address ;
3641});
3742
3843// Client coroutine
39- $ client = spawn (function () use ($ server ) {
44+ $ client = spawn (function () use (& $ address , & $ output ) {
4045 // Wait for server to start with retry logic
4146 $ address = null ;
4247 for ($ attempts = 0 ; $ attempts < 5 ; $ attempts ++) {
4348 delay (10 );
44- $ address = $ server ->getResult ();
4549 if ($ address ) {
4650 break ;
4751 }
@@ -51,37 +55,45 @@ $client = spawn(function() use ($server) {
5155 throw new Exception ("Client: failed to get server address after 5 attempts " );
5256 }
5357
54- echo "Client: connecting to $ address\n " ;
58+ $ output [ ' 4a ' ] = "Client: connecting to $ address " ;
5559 $ socket = stream_socket_client ($ address , $ errno , $ errstr );
5660 if (!$ socket ) {
57- echo "Client: failed to connect: $ errstr\n " ;
61+ $ output [ ' 4b ' ] = "Client: failed to connect: $ errstr " ;
5862 return ;
5963 }
6064
6165 // Send data to server
6266 $ message = "Hello from UDP client " ;
6367 $ bytes = stream_socket_sendto ($ socket , $ message );
64- echo "Client: sent $ bytes bytes \n " ;
68+ $ output [ ' 5 ' ] = "Client: sent $ bytes bytes " ;
6569
6670 // Receive response
6771 $ response = stream_socket_recvfrom ($ socket , 1024 );
68- echo "Client: received ' $ response' \n " ;
72+ $ output [ ' 8 ' ] = "Client: received ' $ response' " ;
6973
7074 fclose ($ socket );
7175});
7276
7377awaitAll ([$ server , $ client ]);
74- echo "End UDP basic operations test \n" ;
78+ $ output ['9 ' ] = "End UDP basic operations test " ;
79+
80+ // Sort output by keys to ensure deterministic test results
81+ ksort ($ output );
82+
83+ // Output sorted results
84+ foreach ($ output as $ line ) {
85+ echo $ line . "\n" ;
86+ }
7587
7688?>
77- --EXPECT --
89+ --EXPECTF --
7890Start UDP basic operations test
7991Server: creating UDP socket
80- Server: listening on udp://127.0.0.1:0
92+ Server: listening on udp://127.0.0.1:%d
8193Server: waiting for UDP data
82- Client: connecting to udp://127.0.0.1:0
94+ Client: connecting to udp://127.0.0.1:%d
8395Client: sent 21 bytes
84- Server: received 'Hello from UDP client' from 127.0.0.1:0
96+ Server: received 'Hello from UDP client' from 127.0.0.1:%d
8597Server: sent 21 bytes response
8698Client: received 'Hello from UDP server'
8799End UDP basic operations test
0 commit comments