|
|
|
|
|
A cause d' une limitation du Zend Engine actuel , il n'est pas possible de passer une constante comme NULL A cause d'une limitation du Zend Engine actuel , il n 'est pas possible de passer une constante comme NULL directement comme paramètre à cette focntion , qui attend une valeur par référence . A la place , utiliser un tableau temporaireou une expression dont le membre de gauche est une variable temporaire :
?php socket_select( $r , $w , $e = NULL , 0) ; ?
Assurez vous bien d' utiliser l 'opérateur === lorsque vous vérifiez les erreurs . Etant donnée que socket_select( ) peut retourner 0 , la comparaison avec FALSE via == donnerait TRUE :
?php if ( false === socket_select($r , $w , $e = NULL , 0) ) { echo "socket_select( ) a eacute;chou eacute ; . Raison : " . socket_strerror(socket_last_error() ) . "\n" ; } ?
Méfiez vous des implémentations de sockets , qui doivent être manipulées avec délicatesse . Quelques règles de base :
Vous devez toujours essayer d' utiliser socket_select( ) sans timeout . Votre programme ne devrait avoir rien à faire si il n ' y a pas de données disponibles . Le code qui dépends d ' un timeout est généralement peut portable , et difficile à déboguer .
Une socket ne doit pas être ajoutée à l' un des tableaux en paramètre , si vous ne souhaitez pas vérifier le résultat après l'appel à socket_select( ) . Après le retour de socket_select( ) , toutes les sockets dans tous les tableaux doivent être vérifiées . Toute socket qui est disponible en écriture ou en lecture doit être utilisée pour écrire ou lire .
Si vous écrivez ou lisez avec une socket retournée dans un tableau , soyez conscient qu ' elles ne pourront pas écrire ou lire toutes les données que vous demandez . Soyez prêts à ne pouvoir lire qu ' un seul octet .
Il est commun à la plupart des implémentations de socket que la seule exception interceptée par les sockets dans le tableau except est le cas des données hors limites , reçues par une socket .