PHP timeout socket_connect

Ich habe eine kleine Anwendung, die ich erstellt, um zu analysieren, die Netzwerk-Verbindung. Es läuft über einen browser und eine Verbindung zu einem lokalen PHP - /Apache-server. Er fragt dann PHP zu senden Sie ein ping-Paket durch einen raw-socket. Das problem ist, dass wenn der host, den ich versuche zu pingen, ist nicht lebendig, oder antwortet nicht auf pings, wir bekommen nie eine Antwort vom server.

I beleave die Buchse Anfrage Leben, bis der apache neu gestartet wird. Ich habe immer gemischte Ergebnisse aus meiner Anwendung in letzter Zeit und ich bin Schuld apache zu viele Steckdosen. Derzeit habe ich den AJAX-Aufruf timeout, und ich war glücklich mit ihm. Aber ich wirklich brauchen, um PHP zu tun, die timeouting, so dass ich nicht 500.000-sockets öffnen auf einen host nicht erreichbar.

Einige Beispiel-code:

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

Dies ist die Funktion, nicht-timeout. Ich brauche, um es zu timeout. Auch PHP script execution time NICHT beeinflussen sockets.

Ich bin ratlos.

  • Im ernst, verwenden Sie fsockopen() statt. Es macht viele Dinge viel einfacher, es wird leichter verfügbar (es ist eine core-Funktion muss explizit deaktiviert werden, in der Erwägung, dass die sockets Erweiterung muss explizit aktiviert werden) und der 5. argument können Sie definieren den connect-timeout auf einer pro-call-basis.
  • kann ich senden Sie ping-Pakete, die durch Sie an eine host-wothout einen port? verwenden Sie RAW-Protokoll?
  • hier ist der code wo ich das erstellen des Sockets. Beachten Sie die AF_INET-und SOCK_RAW: ` $socket = @socket_create(AF_INET, SOCK_RAW, 1); if(!$socket) { $raw['error'] = socket_strerror(socket_last_error()); $raw['status'] = false; return $raw; }`
  • In der Theorie ja (obwohl mit den erweiterten stream_socket_* Funktionen eher als fsockopen()). In der Praxis wäre es eine riesige PITA. Ich irgendwie davon ausgegangen, Sie würde sein Umgang mit TCP, die meisten der Zeit, die ist, was Menschen tun. Wenn das, was Sie wollen, ist ein PHP-driven ICMP-echo-Umsetzung, allerdings hab ich schon gemacht... schaut hier: download.networkm.net/code/php/class.ping.1.0.tar.gz (Anmerkung: es wurde geschrieben für PHP4, und wenn mein OO-Fähigkeiten übrig... etwas zu wünschen übrig, aber es funktioniert, ich habe es ein paar mal)
  • Oh, plus es gibt eine ganze Reihe von random-debugging-Mist Links in es. Entfernen Sie einfach Linien 291-296
  • Danke, ich nehme einen Blick auf Ihre Klasse!
  • Neu! Verbessert! In der Regel einfacher zu bedienen und nicht ganz so ein Mist! download.networkm.net/code/php/class.ping.2.0.tar.gz
  • Danke. Die Klasse wirkt Wunder!! Darf ich es in meinem Netzwerk analyzer-Projekt?
  • Lizenziert unter LGPL, und zu summieren, die im Grunde bedeutet, "ja, Sie können es verwenden, für was immer Sie möchten" 🙂

InformationsquelleAutor Axel Latvala | 2012-08-09
Schreibe einen Kommentar