Hallo!
Ich bin dabei ein kl. Frontend für ein Programm zu schreiben, wobei die Daten per UDP übertragen werden. Meine Funktion zum Abrufen von eingehenden Paketen sieht wie folgt aus:
Code:
function read_data() {
$rv = fread($this->_REMOTE['Socket'], 3);
$status = socket_get_status($this->_REMOTE['Socket']);
if ($status['unread_bytes']) $rv .= fread($this->_REMOTE['Socket'], $status['unread_bytes']);
return $rv;
}
Das Problem was sich nun im Laufe der Programmierung ergeben hat ist, das socket_get_status zwar die noch übrigen Bytes im Puffer zurückgibt, jedoch scheinbar nur bis zum nächsten carriage return bzw. line feed.
Folgende Funktion liefert zwar das gewünschte Resultat, dauert jedoch wesentlich länger, da immer noch versucht werden 3 Bytes aus dem Puffer zu lesen, auch wenn evtl. der Puffer bereits leer ist.
Code:
function read_data() {
$rv = fread($this->_REMOTE['Socket'], 3);
$status = socket_get_status($this->_REMOTE['Socket']);
while ($status['unread_bytes']) {
$rv .= fread($this->_REMOTE['Socket'], $status['unread_bytes']);
$rv .= fread($this->_REMOTE['Socket'], 3);
$status = socket_get_status($this->_REMOTE['Socket']);
}
return $rv;
}
Falls jemand bereits ähnliche Probleme und vielleicht sogar Lösungen/Lösungsansätze gefunden hat, wäre ich sehr erfreut davon zu hören
