socket error messages include attempted address
remote uses subprocess where appropriate for better concurrency
clarify error messages
remote passive mode partially works (leaves remote zombie on exit)