我有一个 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 的资源。为什么会发生这种情况,端口是否可能已经有来自同一进程的打开套接字(没有在套接字上保留簿记)?
PS.: 从不同进程打开两个套接字如预期的那样失败。
相关问题:Multiple UDP Sockets to listen for specific source on the same port
更新
参见 https://3v4l.org/6eWY1 ,似乎描述的行为仅适用于 Windows 版本的 PHP。
最佳答案
关于php - 为什么 stream_socket_server 不阻止来自 Windows 上其他套接字的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36036027/