socket_read() not blocking



当数据之前已经被读取时,试图让我的socket_read()阻塞。我需要它等待$spawn套接字有新数据(可以相等,即希望它在接收"FE"时读取两次),然后再发送。

当没有任何新数据时,如何阻止它

$i=0;
while ($i<10){
    //Read and Parse Client input
    $input = strtoupper(bin2hex(socket_read($spawn, 1)));
    echo $input . "n";
    //Deal with requests
    if ($input == "FE"){ //Server Ping
        socket_write($spawn, $ping_packet);
        echo "Ping Attempt n";
    } elseif ($input == "02"){ //Handshake Request
        socket_write($spawn, $handshake_packet);
        echo "Handshake Attempt n";
    } elseif($input == "01"){ //Login Request
        socket_write($spawn, $kick_packet);
        echo "Login Attempt n";
    }
        $i++;
}

您可以使用socket_set_block将套接字设置为阻塞。有关如何同时处理大量套接字的信息,请参阅socket_select。

如果没有数据可供读取,

socket_read将返回一个空字符串。要进行阻塞读取,请使用带有标志MSG_WAITALL的socket_recv。

最新更新