1--TEST--
2swoole_socket_coro: readv test
3--SKIPIF--
4<?php require __DIR__ . '/../include/skipif.inc'; ?>
5--FILE--
6<?php
7
8use Swoole\Coroutine\Socket;
9use Swoole\Coroutine\Server;
10use Swoole\Coroutine\Server\Connection;
11
12use function Swoole\Coroutine\run;
13
14require __DIR__ . '/../include/bootstrap.php';
15$pm = new SwooleTest\ProcessManager;
16$pm->parentFunc = function () use ($pm) {
17    run(function () use ($pm) {
18        $conn = new Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
19        $conn->connect('127.0.0.1', $pm->getFreePort());
20        $conn->send('hello');
21        $iov = [5, 5];
22        $ret = $conn->readVector($iov);
23        Assert::same($ret, ['hello', 'world']);
24
25        $conn->send('hello');
26        $iov = [5, 7];
27        $ret = $conn->readVector($iov);
28        Assert::same($ret, ['hello', 'world']);
29
30        $conn->send('hello');
31        $iov = [5, 7, 7];
32        $ret = $conn->readVector($iov);
33        Assert::same($ret, ['hello', 'world']);
34        $pm->kill();
35        echo "DONE\n";
36    });
37};
38$pm->childFunc = function () use ($pm) {
39    run(function () use ($pm) {
40        $server = new Server('127.0.0.1', $pm->getFreePort(), false);
41
42        $server->handle(function (Connection $conn) use ($server) {
43            while (true) {
44                $conn->recv();
45                $conn->send("helloworld");
46            }
47        });
48
49        $server->start();
50    });
51};
52$pm->childFirst();
53$pm->run();
54?>
55--EXPECT--
56DONE
57