use handler for client IO instead of half Pipe
sender and receiver code reuse