1--TEST-- 2swoole_socket_coro: sendto 3--SKIPIF-- 4<?php require __DIR__ . '/../include/skipif.inc'; ?> 5--FILE-- 6<?php 7require __DIR__ . '/../include/bootstrap.php'; 8$randomData = ''; 9Co\run(function () { 10 go(function () { 11 $socket = new Swoole\Coroutine\Socket(AF_UNIX, SOCK_DGRAM, IPPROTO_IP); 12 $socket->bind('/tmp/test-server.sock', 0); 13 $data = $socket->recvfrom($peer); 14 if (!$data) { 15 return; 16 } 17 Assert::same($data, 'hello'); 18 Assert::same($peer['address'], '/tmp/test-client.sock'); 19 Assert::same($peer['port'], 0); 20 global $randomData; 21 for ($n = 0; $n < MAX_CONCURRENCY * MAX_REQUESTS; $n++) { 22 $chunk = get_safe_random(1024); 23 $randomData .= $chunk; 24 Assert::same($socket->sendto($peer['address'], $peer['port'], $chunk), strlen($chunk)); 25 } 26 // close 27 Assert::same($socket->sendto($peer['address'], $peer['port'], ''), 0); 28 }); 29 go(function () { 30 $socket = new Swoole\Coroutine\Socket(AF_UNIX, SOCK_DGRAM, IPPROTO_IP); 31 $socket->bind('/tmp/test-client.sock', 0); 32 $socket->sendto('/tmp/test-server.sock', 0, 'hello'); 33 $data = ''; 34 while (true) { 35 $tmp = $socket->recvfrom($peer); 36 if (empty($tmp)) { 37 break; 38 } 39 $data .= $tmp; 40 } 41 global $randomData; 42 if (Assert::same($data, $randomData)) { 43 echo "OK\n"; 44 } 45 }); 46}); 47?> 48--EXPECT-- 49OK 50