Marbelous, 22 bytes
00 .. .. ]] // .. -O @1 .. =O .. .. +O /\ @1 TheAll padding is superfluous in this program, spaces and dots are included only for aesthetic reasonscan be removed.
The // sends the 00 marble through the ]] stdin device until there's a byte available, then it drops that byte. -O-O=0 or -O=O check for ascii 48 which is "0", then either the input gets output once or forever (through the @1 loop), incremented back up to the proper ascii value with a +O on the way out.