socket_read()没有阻塞

时间:2012-07-19 13:12:38

标签: php sockets

尝试让我的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++;
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果没有准备好读取数据,

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