2010-07-14 3 views
0

L'exemple Simple TCP/IP client se bloque si aucune donnée n'est en cours de réception.PHP - Comment faire pour que l'exemple de code de php.net ne se bloque pas?

Pour voir ce que je veux dire, copiez le code client et l'exécuter, mais enlever l'un des \ r \ n de dans la requête GET pour le rendre invalide, il ressemble à ceci:

$in = "HEAD/HTTP/1.1\r\n"; 
$in .= "Host: www.example.com\r\n"; 
$in .= "Connection: Close\r\n"; 

Le le serveur ne répondra pas, ce qui est normal, mais je veux être en mesure d'avoir un délai d'expiration ou un moyen de l'empêcher de se bloquer.

J'ai essayé de définir le délai en utilisant socket_set_option mais je pense que cela s'applique uniquement à socket_connect.

Quelqu'un at-il une solution?

Si je socket_recv avec un drapeau de MSG_DONTWAIT, quelle est la bonne façon d'attendre toutes les données, la connexion à proximité, ou un délai d'attente si aucun des deux se produisent?

Répondre

1

Vous pouvez utiliser socket_select() pour déterminer si un socket a des données à lire.

+0

Je ne peux pas croire que je n'ai pas remarqué cette fonction sur le site php.net, merci. –

Questions connexes