Was hälst du davon, den Empfäng Interruptgesteuert zu gestalten? Dann 'unterbricht' das Programm nur wenn auch wirklich Daten kommen. So brauchst du kein Timeout.