1--TEST-- 2swoole_socket_coro: shutdown 3--SKIPIF-- 4<?php require __DIR__ . '/../include/skipif.inc'; ?> 5--FILE-- 6<?php 7require __DIR__ . '/../include/bootstrap.php'; 8for ($n = 2; $n--;) { 9 $randoms[] = get_safe_random(); 10} 11go(function () use ($randoms) { 12 $server = new Swoole\Coroutine\Socket(AF_INET, SOCK_STREAM, IPPROTO_IP); 13 Assert::true($server->bind('127.0.0.1', 9601)); 14 Assert::true($server->listen(512)); 15 $conn = $server->accept(); 16 Assert::isInstanceOf($conn, Swoole\Coroutine\Socket::class); 17 Assert::same($conn->recv(), array_shift($randoms)); 18 Assert::greaterThan($conn->send(array_shift($randoms)), 0); 19 $conn->close(); 20 $server->close(); 21}); 22go(function () use ($randoms) { 23 $socket = new Swoole\Coroutine\Socket(AF_INET, SOCK_STREAM, IPPROTO_IP); 24 Assert::true($socket->connect('127.0.0.1', 9601)); 25 Assert::greaterThan($socket->send(array_shift($randoms)), 0); 26 Assert::same($socket->recv(), array_shift($randoms)); 27 Assert::true($socket->shutdown(STREAM_SHUT_WR)); 28 for ($n = MAX_REQUESTS; $n--;) { 29 Assert::false($socket->send(array_shift($randoms))); 30 Assert::same($socket->errCode, SOCKET_EPIPE); 31 } 32 Assert::assert($socket->shutdown(STREAM_SHUT_RD)); 33 for ($n = MAX_REQUESTS; $n--;) { 34 Assert::assert(!$socket->recv()); 35 } 36 Assert::false($socket->shutdown()); 37 Assert::same($socket->errCode, SOCKET_ENOTCONN); 38 Assert::true($socket->close()); 39 Assert::false($socket->send('')); 40 Assert::false($socket->recv()); 41 Assert::same($socket->errCode, SOCKET_EBADF); 42}); 43Swoole\Event::wait(); 44echo "DONE\n"; 45?> 46--EXPECT-- 47DONE 48