diff --git a/tcp.go b/tcp.go
index e142fac6147b232276cdbed83a521c60c59244c0..e424f694d90dbfa908c1cb21069bbd01b4334e23 100644
--- a/tcp.go
+++ b/tcp.go
@@ -51,7 +51,7 @@ func tcpHandleConnection(conn net.Conn, logger *zap.Logger) {
 	}
 
 	targetAddr := Opts.TargetAddr6
-	if AddrVersion(conn.RemoteAddr()) == 4 {
+	if AddrVersion(saddr) == 4 {
 		targetAddr = Opts.TargetAddr4
 	}
 
diff --git a/utils.go b/utils.go
index 57065603051d102f76185e81068e4ea462516122..2610bb74300f4ecdbcd162d709bee32575054e6b 100644
--- a/utils.go
+++ b/utils.go
@@ -69,7 +69,7 @@ func DialUpstreamControl(sport int) func(string, string, syscall.RawConn) error
 			}
 
 			if network == "tcp6" || network == "udp6" {
-				syscallErr = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IPV6_V6ONLY, 0)
+				syscallErr = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, 0)
 				if syscallErr != nil {
 					syscallErr = fmt.Errorf("setsockopt(IPPROTO_IP, IPV6_ONLY, 0): %s", syscallErr.Error())
 					return