5

サンプルコードは次のとおりです。

<?php
$fp = fsockopen($host, $port, $errno, $errstr, $connectTimeout);

if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    echo "connected\n"; 
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

stream_set_timeout($fp, 5);とを見
socket_set_option($fp, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));たことがありますが、読み取りがタイムアウトすることはありません。

の PHP ドキュメントでいくつかの警告を見てきましたstream_set_timeout()

この関数は、stream_socket_recvfrom() のような高度な操作では機能しません。代わりに、timeout パラメータを指定して stream_select() を使用してください。

select()or ループは使用したくありません。タイムアウトでブロッキング読み取りを行う標準的な方法は何ですか?

4

1 に答える 1

2

socket_set_optionで作成されたソケット用ですsocket_create

stream_set_timeoutfopenまたはによって作成されたようなストリーム用fsockopenです。

PHP ドキュメントには、fsockopen での使用方法に関するサンプル コードが含まれています。

于 2012-11-06T18:26:37.613 に答える