feat: ignore eof err (#450)

Closes #443
diff --git a/internal/remote/remote_client.go b/internal/remote/remote_client.go
index 302b5e5..7b5b1ea 100644
--- a/internal/remote/remote_client.go
+++ b/internal/remote/remote_client.go
@@ -141,32 +141,28 @@
 	defer primitive.BackHeader(header)
 	for {
 		if err != nil {
+			// conn has been closed actively
 			if r.isClosed(err) {
 				return
 			}
-			rlog.Error("conn error, close connection", map[string]interface{}{
-				rlog.LogKeyUnderlayError: err,
-			})
+			if err != io.EOF {
+				rlog.Error("conn error, close connection", map[string]interface{}{
+					rlog.LogKeyUnderlayError: err,
+				})
+			}
+			c.closeConnection(r)
+			r.destroy()
 			break
 		}
 
 		_, err = io.ReadFull(r, header)
 		if err != nil {
-			if r.isClosed(err) {
-				return
-			}
-			rlog.Error("io ReadFull error when read header", map[string]interface{}{
-				rlog.LogKeyUnderlayError: err,
-			})
 			continue
 		}
 
 		var length int32
 		err = binary.Read(bytes.NewReader(header), binary.BigEndian, &length)
 		if err != nil {
-			rlog.Error("binary decode header error", map[string]interface{}{
-				rlog.LogKeyUnderlayError: err,
-			})
 			continue
 		}
 
@@ -174,12 +170,6 @@
 
 		_, err = io.ReadFull(r, buf)
 		if err != nil {
-			if r.isClosed(err) {
-				return
-			}
-			rlog.Error("io ReadFull error when read payload", map[string]interface{}{
-				rlog.LogKeyUnderlayError: err,
-			})
 			continue
 		}
 
@@ -318,10 +308,6 @@
 				"remote":                 conn.RemoteAddr(),
 				rlog.LogKeyUnderlayError: err,
 			})
-		} else {
-			rlog.Info("remoting conn closed", map[string]interface{}{
-				"remote": conn.RemoteAddr(),
-			})
 		}
 		return true
 	})