UPD Stream auslesen: Kein EOF, lange Scriptlaufzeit

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UPD Stream auslesen: Kein EOF, lange Scriptlaufzeit

    Hallo!

    Ich baue ein Verbindung über udp auf:

    Quellcode

    1. $connection = fsockopen( "udp://".$ip, $port, $errnr, $errstr, $timeout );

    Wenn ich nun Daten über die Verbindung sende, erwarte ich eine Antwort. Diese lese ich per fread aus.

    Quellcode

    1. $data = fread( $connection, $length );

    Dabei ist die Länge begrenzt, wird aber in kaum einem Fall wirklich komplett ausgenutzt.

    Über UDP scheine ich aber kein EOF zu erhalten, denn fread liest so lange Daten, bis die Verbindung durch einen Timeout unterbrochen wird. Soweit macht das auch wohl Sinn, aber ich möchte natürlich direkt aufhören zu lesen, wenn keine Daten mehr kommen.
    Über [phpdoc]stream_get_meta_data[/phpdoc] kann ich ermitteln wieviele unread_bytes noch im Buffer von PHP sind. Allerdings wird von der Nutzung dieses Wertes in Scripten abgeraten. Daher möchte ich das natürlich vermeiden.

    Kennt da jemand eine andere zuverlässige Methode? Jediglich den Timeout runterzusetzen, ist ja keine Lösung. Dadurch könnte ich die Antwort auch nicht komplett empfangen.

    Gruß,
    Max123
    Die Japaner glauben jetzt auch, sie könnten den Superrechner verkaufen. Das wäre
    so, als würde man einen Jumbo-Jet nehmen, vorne und hinten die Spitzen absägen,
    davon 10 Stück zusammenschweißen und als ultimativen Super-Jet verkaufen.
  • Moin Max123,

    schau dir dazu mal die Diskussion in der PHP Mailinglist an: Bug #15639: detecting end of UDP packets

    Das Ergebnis ist irgendwie unklar.
    Ich denke ähnlich wie der PHP Entwickler - UDP hat ja im Gegensatz zu TCP weniger Protokoll-"Overhead".
    Wenn du ein EOF senden willst, dann musst du eben dein eigenes Protokoll bauen und es serverseitig einfach mitschicken.