1--TEST--
2swoole_server: addlistener
3--SKIPIF--
4<?php require __DIR__ . '/../include/skipif.inc'; ?>
5--FILE--
6<?php
7require __DIR__ . '/../include/bootstrap.php';
8
9$simple_tcp_server = __DIR__ . "/../include/api/swoole_server/opcode_server.php";
10
11use Swoole\Server;
12
13$port1 = get_one_free_port();
14
15$pm = new SwooleTest\ProcessManager;
16$pm->parentFunc = function ($pid) {
17    Co\Run(function () {
18        $cli = new Swoole\Coroutine\Client(SWOOLE_SOCK_UDP);
19        $r = $cli->connect(UDP_SERVER_HOST, UDP_SERVER_PORT, 1);
20        Assert::assert($r);
21        $cli->send("test");
22        $i = $cli->getpeername();
23        Assert::assert($i !== false);
24        $cli->send('shutdown');
25        $cli->close();
26        echo "SUCCESS\n";
27    });
28};
29
30$pm->childFunc = function () use ($pm) {
31    $serv = new Server(UDP_SERVER_HOST, UDP_SERVER_PORT, SWOOLE_BASE, SWOOLE_SOCK_UDP);
32    $serv->set(["worker_num" => 1, 'log_file' => '/dev/null']);
33    $serv->on("WorkerStart", function (Server $serv) use ($pm) {
34        $pm->wakeup();
35    });
36    $serv->on("Packet", function (Server $serv, $data, $clientInfo) {
37        if (trim($data) == 'shutdown') {
38            $serv->shutdown();
39            return;
40        }
41        $serv->sendto($clientInfo['address'], $clientInfo['port'], $data);
42    });
43    $serv->start();
44};
45
46$pm->childFirst();
47$pm->run();
48?>
49--EXPECT--
50SUCCESS
51