AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] Socket listen mit Timeout

Ein Thema von rollstuhlfahrer · begonnen am 2. Nov 2011 · letzter Beitrag vom 6. Nov 2011
Antwort Antwort
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#1

[PHP] Socket listen mit Timeout

  Alt 2. Nov 2011, 18:33
HI @all,

ich möchte mir ein kleines PHP-Skript zusammenbauen, welches die folgenden Funktionen hat:
  1. Einen UDP-Broadcast verschicken
  2. Einen TCP-Socket aufbauen und darauf lauschen
  3. Wenn nach eine bestimmten Zeit keine Verbindung kam, den Socket wieder schließen und das Skript beenden
  4. Wenn doch in der Zwischenzeit eine Verbindung kam, dann eine Datei anlegen und dann das Skript beenden

Die ersten beiden Punkte habe ich schon fertig, nur habe ich keine Ahnung, wie mal einen Timeout bei Sockets mit PHP hinbekommt. Als Idee hatte ich, einen Fork zu erstellen und den nach einem Timeout einfach abzuschießen, aber Forks gehen mit Windows nicht.

Als Anforderung: Das Skript sollte möglichst unter beiden Systemen laufen: Windows und Ubuntu.

PHP-Quellcode:
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, "127.0.0.1", 4567);

socket_listen($socket,1);
$dataSock = socket_accept($socket);
echo socket_read($dataSock, 1024, PHP_NORMAL_READ);
// close sockets
socket_close($socket);
?>
Das ist der Code, der auf die Verbindung wartet.

So: Wie sage ich jetzt PHP, dass es einen Timeout gibt?

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: [PHP] Socket listen mit Timeout

  Alt 3. Nov 2011, 00:45
Mal ein kleiner Codeausschnitt:
Code:
$socket=@fsockopen($address, $port, $errno, $errstr, $timeout);
if ($socket != false) {
  echo "online";
  fclose($socket);
} else {
  echo "timeout";
}
//EDIT: Mist, erst jetzt richtig realisiert das es um einen Server geht
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

AW: [PHP] Socket listen mit Timeout

  Alt 6. Nov 2011, 14:58
Ok, ich habe jetzt eine funktionierende Lösung:

Der Eltern-Prozess erzeugt einen Fork und wartet den Timeout ab.
Im Kind-Prozess wird der Socket erzeugt und auf Listen geschalten.
Wenn dann der Timeout abgelaufen ist, verbindet sich der Eltern-Prozess per Socket auf den Kind-Prozess und teilt diesem mit, dass das Timeout erreicht ist. Danach beendet der Kind-Prozess das lauschen und beendet sich selbet.
Nur ist das nicht mehr unter Windows lauffähig, funktioniert aber.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz