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