handle timeout/error/disconnects and properly close! async/chan in these situations