监听的udp端口6000,
worker里有一个listen和unlisten方法,我希望在一个逻辑地方,unlisten,使用异步udp发起一个连接,指定使用6000端口发起,然后调用listen.
但是为什么还是报already in use 错误.
代码如下:
$server就是监听在4788下的worker,
这段代码写在一个回调里面,
打印unlisten的信息(改worker.php),确实关闭了socket,对象属性_mainSocket也为null,把fclose换成stream_socket_shutdown也不行.
$server->unlisten();
foreach ($server->connections as $connection) {
$connection->close();
}
// sleep(1);
// connect to the internet using port '4788'
$opts = array(
'socket' => array(
'bindto' => '0:4788',
),
);
$find_conn = new AsyncUdpConnection($address,$opts);
$find_conn->worker = $server;
$find_conn->action = $action;
$find_conn->protocol = $server->protocol;
// $find_conn->onConnect = function($connection) use ($msg,$server){
// $connection->close($msg);
// $server->listen();
// };
// $find_conn->connect();
$find_conn->close($msg);
$server->listen();
根据打印的信息,unlisten确实执行了但是stream_socket_client还是不能占用这个端口,这是为什么?
因为主进程还监听着那个udp端口。unlisten只是取消当前进程的监听,不影响其它进程。
感谢感谢,立刻点开了思路,需求已经实现,