在wss(ssl://端口443)上超时的PHP stream_socket_client无法正常工作

时间:2016-01-02 07:01:16

标签: php ssl websocket

我认为我发现了一个非常具体的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错误还是我错过了某种设置?

0 个答案:

没有答案