unlisten 真的能用吗?unlisten之后能否使用此端口发起异步通信.

0

监听的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还是不能占用这个端口,这是为什么?

已邀请:

walkor

赞同来自:

因为主进程还监听着那个udp端口。unlisten只是取消当前进程的监听,不影响其它进程。

要回复问题请先登录注册