diff --git a/conn/conn_default.go b/conn/conn_default.go
index 2360068..82a1e42 100644
--- a/conn/conn_default.go
+++ b/conn/conn_default.go
@@ -99,6 +99,7 @@ again:
 
 	bind.ipv6, port, err = listenNet("udp6", port)
 	if uport == 0 && err != nil && errors.Is(err, syscall.EADDRINUSE) && tries < 100 {
+		bind.ipv4.Close()
 		tries++
 		goto again
 	}
diff --git a/conn/conn_linux.go b/conn/conn_linux.go
index 716028f..f07c3bb 100644
--- a/conn/conn_linux.go
+++ b/conn/conn_linux.go
@@ -123,6 +123,7 @@ again:
 	bind.sock4, newPort, err = create4(port)
 	if err != nil {
 		if originalPort == 0 && err == syscall.EADDRINUSE && tries < 100 {
+			unix.Close(bind.sock6)
 			tries++
 			goto again
 		}