1--TEST-- 2swoole_socket_coro: writev with eagain 3--SKIPIF-- 4<?php require __DIR__ . '/../include/skipif.inc'; ?> 5--FILE-- 6<?php 7 8use Swoole\Coroutine; 9use Swoole\Coroutine\Socket; 10 11use function Swoole\Coroutine\run; 12 13require __DIR__ . '/../include/bootstrap.php'; 14 15$totalLength = 0; 16$iovector = []; 17$packedStr = ''; 18 19for ($i = 0; $i < 10; $i++) { 20 $iovector[$i] = str_repeat(get_safe_random(1024), 128); 21 $totalLength += strlen($iovector[$i]); 22 $packedStr .= $iovector[$i]; 23} 24 25run(function () { 26 $server = new Socket(AF_INET, SOCK_STREAM, IPPROTO_IP); 27 $port = get_one_free_port(); 28 29 go(function () use ($server, $port) { 30 Assert::assert($server->bind('127.0.0.1', $port)); 31 Assert::assert($server->listen(512)); 32 $conn = $server->accept(); 33 Assert::assert($conn instanceof Socket); 34 Assert::assert($conn->fd > 0); 35 36 global $totalLength, $packedStr; 37 Assert::assert($conn instanceof Socket); 38 39 // Let writeVectorAll trigger EAGAIN (verify the correctness of the error returned by writeVectorAll) 40 Coroutine::sleep(0.5); 41 Assert::eq($conn->recvAll($totalLength), $packedStr); 42 }); 43 44 go(function () use ($server, $port) { 45 global $iovector, $totalLength; 46 47 $conn = new Socket(AF_INET, SOCK_STREAM, IPPROTO_IP); 48 Assert::assert($conn->connect('127.0.0.1', $port)); 49 $ret = $conn->writeVectorAll($iovector); 50 Assert::eq($ret, $totalLength); 51 $server->close(); 52 }); 53}); 54 55echo "DONE\n"; 56?> 57--EXPECT-- 58DONE 59