1--TEST-- 2swoole_socket_coro: recv bad packet 3--SKIPIF-- 4<?php 5require __DIR__ . '/../include/skipif.inc'; 6?> 7--FILE-- 8<?php 9require __DIR__ . '/../include/bootstrap.php'; 10 11const SIZE = 2 * 1024 * 1024; 12 13$pm = new SwooleTest\ProcessManager; 14 15$pm->parentFunc = function ($pid) use ($pm) { 16 for ($i = 0; $i < MAX_CONCURRENCY_MID; $i++) { 17 go(function () use ($pm, $i) { 18 $cli = new Co\Socket(AF_INET, SOCK_STREAM, 0); 19 $cli->setProtocol([ 20 'open_length_check' => true, 21 'package_max_length' => 4 * 1024 * 1024, 22 'package_length_type' => 'N', 23 'package_length_offset' => 0, 24 'package_body_offset' => 4, 25 ]); 26 if ($cli->connect('127.0.0.1', $pm->getFreePort()) == false) { 27 echo "ERROR\n"; 28 return; 29 } 30 for ($i = 0; $i < 3; $i++) { 31 $sid = strval(rand(100000, 999999)); 32 $send_data = str_repeat('A', 1000) . $sid; 33 $cli->send(pack('N', strlen($send_data)) . $send_data); 34 $data = $cli->recvPacket(0.2); 35 Assert::isEmpty($data); 36 } 37 }); 38 } 39 Swoole\Event::wait(); 40 $pm->kill(); 41}; 42 43$pm->childFunc = function () use ($pm) { 44 $serv = new Swoole\Server('127.0.0.1', $pm->getFreePort(), SWOOLE_PROCESS); 45 $serv->set(array( 46 "worker_num" => 4, 47 'log_level' => SWOOLE_LOG_ERROR, 48 'open_length_check' => true, 49 'package_max_length' => 4 * 1024 * 1024, 50 'package_length_type' => 'N', 51 'package_length_offset' => 0, 52 'package_body_offset' => 4, 53 )); 54 $serv->on("WorkerStart", function (Swoole\Server $serv) use ($pm) { 55 $pm->wakeup(); 56 }); 57 $serv->on('receive', function (Swoole\Server $serv, $fd, $rid, $data) { 58 $len = rand(1024, 8192); 59 $send_data = str_repeat('A', $len); 60 //bad packet 61 $serv->send($fd, pack('N', SIZE) . $send_data); 62 }); 63 $serv->start(); 64}; 65 66$pm->childFirst(); 67$pm->run(); 68?> 69--EXPECT-- 70