【发布时间】:2016-07-02 08:29:06
【问题描述】:
我有一个 reactphp 脚本打开多个端口进行监听。代码归结为尝试在端口 x 上打开一个套接字,如果被占用,则选择端口 +1。
我发现我可以为同一个端口打开多个套接字而不会出现错误消息,这使得上述查找“空闲”端口的方法无效:
var_dump($s1 = stream_socket_server("tcp://127.0.0.1:7777", $errno, $errstr));
var_dump($s2 = stream_socket_server("tcp://127.0.0.1:7777", $errno, $errstr));
两个调用都返回具有不同 ID 的资源。为什么会发生这种情况?端口是否可能已经有来自同一个进程的打开套接字(没有在套接字上保存 book)?
PS.:从不同进程打开两个套接字按预期失败。
相关问题:Multiple UDP Sockets to listen for specific source on the same port
更新
请参阅https://3v4l.org/6eWY1,似乎所描述的行为仅适用于 Windows 版本的 PHP。
【问题讨论】:
-
你运行的是什么版本的 PHP?
-
当我在 PHP 5.5.9 上运行您的代码时,我得到:
resource(5) of type (stream) PHP Warning: stream_socket_server(): unable to connect to tcp://127.0.0.1:7777 (Address already in use) in /home/hq6/Code/SO/PHP/SSB.php on line 3 bool(false) -
嗯。那么这听起来像是一个平台问题——在 Windows 上我得到了资源(5)和资源(6)。
-
1) 相同的进程,没有使用,因为我只想找到一个空闲的套接字
-
2) 使用不同的进程,第二个套接字上的脚本错误