1--TEST--
2swoole_socket_coro: recv/send all
3--SKIPIF--
4<?php require __DIR__ . '/../include/skipif.inc'; ?>
5--FILE--
6<?php
7require __DIR__ . '/../include/bootstrap.php';
8define('BIG_RANDOM_DATA', str_repeat(get_safe_random(1024), 64 * 1024));
9define('BIG_RANDOM_DATA_LENGTH', strlen(BIG_RANDOM_DATA));
10$server = new Swoole\Coroutine\Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
11$port = get_one_free_port();
12go(function () use ($server, $port) {
13    Assert::assert($server->bind('127.0.0.1', $port));
14    Assert::assert($server->listen(512));
15    $conn_map = [];
16    while ($conn = $server->accept()) {
17        Assert::assert($conn instanceof  Co\Socket);
18        Assert::assert($conn->fd > 0);
19        $conn_map[$conn->fd] = $conn;
20        go(function () use ($conn) {
21            Assert::assert($conn instanceof Swoole\Coroutine\Socket);
22            Assert::assert($conn->recvAll(BIG_RANDOM_DATA_LENGTH) === BIG_RANDOM_DATA);
23            Assert::assert($conn->sendAll(BIG_RANDOM_DATA) === BIG_RANDOM_DATA_LENGTH);
24        });
25    }
26});
27go(function () use ($server, $port) {
28    $conn = new Swoole\Coroutine\Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
29    Assert::assert($conn->connect('127.0.0.1', $port));
30    Assert::assert($conn->sendAll(BIG_RANDOM_DATA) === BIG_RANDOM_DATA_LENGTH);
31    Assert::assert($conn->recvAll(BIG_RANDOM_DATA_LENGTH) === BIG_RANDOM_DATA);
32    Assert::assert($server->close());
33});
34Swoole\Event::wait();
35echo "DONE\n";
36?>
37--EXPECT--
38DONE
39