Faire PHP socket_connect délai d'attente

J'ai une petite application que j'ai créé pour analyser la connexion réseau. Il fonctionne à partir d'un navigateur et se connecte à un local de PHP/Apache serveur. Puis, il demande à PHP d'envoyer un paquet ping à travers une socket raw. Le problème est que si l'hôte, je suis en train de ping n'est pas en vie ou ne répond pas aux pings, nous n'avons jamais obtenir une réponse à partir du serveur.

Je beleave le socket demande de vies jusqu'à ce que apache est redémarré. J'ai obtenu des résultats mitigés à partir de mon application dernièrement, et je suis à blâmer apache trop à l'aide de nombreux supports. Actuellement, j'ai mis de l'appel AJAX est le délai d'attente et j'ai été heureux avec elle. Mais j'ai vraiment besoin de faire de PHP ne le timeouting de sorte que je n'aurai pas de 500 000 sockets ouverts à un ordinateur hôte inaccessible.

Un exemple de code:

$sockconn = @socket_connect($socket, $target, null);
if(!$sockconn)
{
    $raw['error'] = socket_strerror(socket_last_error());
    $raw['status'] = false;
    return $raw;
}

C'est la fonction qui ne sera pas de délai d'expiration. J'ai besoin d'obtenir de délai d'attente. Aussi le script PHP le temps d'exécution N'a PAS d'incidence sur les sockets.

Je suis paumé.

Sérieusement, utiliser les fsockopen() à la place. Il fait beaucoup de choses beaucoup plus facile, il est plus facilement disponible (c'est une fonction de base qui doivent être explicitement désactivé, alors que les prises d'extension doit être explicitement activé), et le 5ème argument permet de définir le délai de connexion par appel.
Dans théorie oui (même si, avec la plus avancée stream_socket_* des fonctions plutôt que des fsockopen()). Dans la pratique, il serait un énorme pain PITA. Je suppose que vous traiterait avec TCP, la plupart du temps c'est ce que font les gens. Si vous voulez une PHP ICMP echo de la mise en œuvre, même si, je l'ai déjà fait... prendre un coup d'oeil à ceci: download.networkm.net/code/php/class.ping.1.0.tar.gz (à noter qu'il a été écrit pour PHP4, et quand mon OO compétences gauche... quelque chose à désirer, mais il fonctionne je l'ai utilisé une couple de fois)
Oh et puis il y a tout un tas de hasard de débogage de la merde gauche. Seulement supprimer les lignes 291-296
Nouveau! Amélioration de la! Généralement plus faciles à utiliser et pas tout à fait comme de la merde! download.networkm.net/code/php/class.ping.2.0.tar.gz
Sous licence LGPL, et pour résumer que, fondamentalement signifie "Oui, vous pouvez l'utiliser pour tout ce que vous voulez" 🙂

OriginalL'auteur Axel Latvala | 2012-08-09