propogate timeouts back to the caller

this enables partial timeouts