Es gibt keine Endekennung.
Wenn er keine Zeichen mehr bekommt, kann er davon ausgehen, dass die Übertragung beendet ist.
Also gibt es doch eine Endekennung, nämlich in Form einer Sendepause.
Dann würde ich in die Schleife einen Timeout auf der Basis eines Timer-Interrupts mit rein nehmen.