From c3acefb7e5aa5ef4cd65fc77ad4caa917efda130 Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Mon, 12 May 2014 05:08:04 +0000 Subject: Log and propagate errors between the 2 goroutines in copyLoop. This fixes #1. --- obfs4proxy/obfs4proxy.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'obfs4proxy/obfs4proxy.go') diff --git a/obfs4proxy/obfs4proxy.go b/obfs4proxy/obfs4proxy.go index dc0c2bc..34027fc 100644 --- a/obfs4proxy/obfs4proxy.go +++ b/obfs4proxy/obfs4proxy.go @@ -81,11 +81,21 @@ func copyLoop(a, b net.Conn) { // XXX: Log/propagate errors. go func() { - io.Copy(b, a) + _, err := io.Copy(b, a) + if err != nil { + b.Close() + a.Close() + log.Printf("[WARN] Connection closed: %s", err) + } wg.Done() }() go func() { - io.Copy(a, b) + _, err := io.Copy(a, b) + if err != nil { + a.Close() + b.Close() + log.Printf("[WARN] Connection closed: %s", err) + } wg.Done() }() @@ -115,7 +125,7 @@ func serverHandler(conn net.Conn, info *pt.ServerInfo) error { } defer or.Close() - copyLoop(conn, or) + copyLoop(or, conn) return nil } -- cgit v1.2.3