1

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

2 回答 2

1

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

于 2012-07-19T13:17:34.283 回答
0

如果没有准备好读取数据,socket_read 将返回一个空字符串。要进行阻塞读取,请使用带有标志 MSG_WAITALL 的 socket_recv。

于 2016-02-29T11:25:20.233 回答