小编Rob*_*bby的帖子

远程连接消失后,PHP stream_select继续触发空白读取事件

我在PHP中使用流式套接字从远程服务器读取.当远程服务器在连接后消失时,stream_select继续在流的读取部分上显示已更改的流,但正在读入的数据是空字符串.

这是一个重现错误的小案例.它是两个组件,服务器和客户端组件.

为了复制该bug,您需要从命令行使用php执行以下操作:
1.启动server.php
2.启动client.php

此时服务器应显示"按返回继续....或CTRL-C",客户端应显示"杀死您的服务器".按返回继续....'

  1. Ctrl-c server.php
  2. 在client.php上按Enter键

此时您应该看到来自client.php的调试输出显示问题(您将非常快速地想要ctrl-c,它会非常快速地打印大量重复信息)

我不确定为什么在服务器组件不再运行之后,stream_select继续将读取流显示为具有更改.

server.php

<?php
  $socket = stream_socket_server("tcp://0.0.0.0:51111", $errno, $errstr);
  $s = stream_socket_accept($socket);

  print("Press return to continue.... or CTRL-C me");
  fread(STDIN,1); // Wait for one character to be pressed.
  fwrite($s, "Yep here's some stuff for you\0");
?>
Run Code Online (Sandbox Code Playgroud)

client.php

<?php
$url = "localhost";
$port = 51111;

$errno = 0;
$errstr = "";

$fp = @stream_socket_client("tcp://".$url.":".$port, $errno, $errstr, 5);
if (!$fp) 
{
  print( "Unable to open socket: $errstr ($errno)\n" );
  throw new Exception( "Unable …
Run Code Online (Sandbox Code Playgroud)

php sockets

2
推荐指数
1
解决办法
3802
查看次数

标签 统计

php ×1

sockets ×1