supports sys.stdout
allow reuse address. allow keyboard interrupt.