transport: handle all return values of tsg_read

tsg_read can also return 0 which means that no data (complete PDU) is
currently available. This case wasn't handled properly.

Fixes #2056
tsg: unwind recursion in tsg_read