我认为我发现了一个非常具体的PHP错误,即使用SSL websockets,stream_set_timeout()设置的超时也不会被遵守。
我可以使用以下简单脚本重现它:
<?php
$context = stream_context_create();
$fp = stream_socket_client ("ssl://echo.websocket.org:443",$errno,$errstr,5,STREAM_CLIENT_CONNECT,$context);
stream_set_timeout($fp, 5);
if (!$fp) {
echo "Unable to open\n";
} else {
//fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
stream_set_timeout($fp, 5);
$res = fread($fp, 2000);
$info = stream_get_meta_data($fp);
//fclose($fp);
if ($info['timed_out']) {
echo 'Connection timed out!';
} else {
echo $res;
}
}
如果您使用tcp://echo.websocket.org:80切换ssl://echo.websocket.org:443,则会在5秒后正确触发超时。
这是一个PHP错误还是我错过了某种设置?