php - 为什么 stream_socket_server 不阻止来自 Windows 上其他套接字的端口?

标签 php windows sockets

我有一个 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。

最佳答案

看看this technique测试端口是否打开。

我用你的代码得到了相同的结果,这种技术对我来说很有用,可以确定端口是否已经被相同的进程打开。

如果您不介意开销,那可能是一种选择。

关于php - 为什么 stream_socket_server 不阻止来自 Windows 上其他套接字的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36036027/

相关文章:

java - 适用于 Windows 的安装程序

windows - Windows 服务高可用性的任何模式?

windows - 通过注册表将上下文菜单项添加到特定扩展

php - 如何在 symfony2 中设置表前缀

php - php 代码更新错误

php - 从 Symfony/Twig 中的覆盖版本访问父模板

php - 按 ID 分组对话并加入最新消息

ios - IPV6 连接到 IPV4 TOS 选项

java - 在 Java 中创建远程 SocketServer 时出现 Connectiontimedout 错误

c++ - 多个套接字连接