![]() |
[PHP] Socket listen mit Timeout
HI @all,
ich möchte mir ein kleines PHP-Skript zusammenbauen, welches die folgenden Funktionen hat:
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:
Das ist der Code, der auf die Verbindung wartet.
<?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); ?> So: Wie sage ich jetzt PHP, dass es einen Timeout gibt? Bernhard |
AW: [PHP] Socket listen mit Timeout
Mal ein kleiner Codeausschnitt:
Code:
//EDIT: Mist, erst jetzt richtig realisiert das es um einen Server geht :wall:
$socket=@fsockopen($address, $port, $errno, $errstr, $timeout);
if ($socket != false) { echo "online"; fclose($socket); } else { echo "timeout"; } |
AW: [PHP] Socket listen mit Timeout
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz