diff --git a/obfs4proxy/obfs4proxy.go b/obfs4proxy/obfs4proxy.go
index 42a67404278566209fc50593323d03149d9bc88a..255bdf1b186c35a45df9e53cba110eed20b98ee2 100644
--- a/obfs4proxy/obfs4proxy.go
+++ b/obfs4proxy/obfs4proxy.go
@@ -88,22 +88,22 @@ func copyLoop(a, b net.Conn) {
 	go func() {
 		defer logAndRecover()
 		defer wg.Done()
+		defer b.Close()
+		defer a.Close()
 
 		_, err := io.Copy(b, a)
 		if err != nil {
-			b.Close()
-			a.Close()
 			log.Printf("[WARN] Connection closed: %s", err)
 		}
 	}()
 	go func() {
 		defer logAndRecover()
 		defer wg.Done()
+		defer a.Close()
+		defer b.Close()
 
 		_, err := io.Copy(a, b)
 		if err != nil {
-			a.Close()
-			b.Close()
 			log.Printf("[WARN] Connection closed: %s", err)
 		}
 	}()