Jelajahi Sumber

Fix rebind to not put the socket in blocking mode (#972)

Nate Brown 1 tahun lalu
induk
melakukan
f7e392995a
1 mengubah file dengan 7 tambahan dan 2 penghapusan
  1. 7 2
      udp/udp_darwin.go

+ 7 - 2
udp/udp_darwin.go

@@ -43,10 +43,15 @@ func NewListenConfig(multi bool) net.ListenConfig {
 }
 
 func (u *GenericConn) Rebind() error {
-	file, err := u.File()
+	rc, err := u.UDPConn.SyscallConn()
 	if err != nil {
 		return err
 	}
 
-	return syscall.SetsockoptInt(int(file.Fd()), unix.IPPROTO_IPV6, unix.IPV6_BOUND_IF, 0)
+	return rc.Control(func(fd uintptr) {
+		err := syscall.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_BOUND_IF, 0)
+		if err != nil {
+			u.l.WithError(err).Error("Failed to rebind udp socket")
+		}
+	})
 }