if tt.ipv6 && !supportsIPv6 {
continue
}
- port := usableLocalPort(t, tt.net, tt.laddr)
- l1, err := Listen(tt.net, tt.laddr+":"+port)
- if err != nil {
- t.Fatalf("First Listen(%q, %q) failed: %v", tt.net, tt.laddr+":"+port, err)
- }
+ l1, port := usableListenPort(t, tt.net, tt.laddr)
checkFirstListener(t, tt.net, tt.laddr+":"+port, l1)
l2, err := Listen(tt.net, tt.laddr+":"+port)
checkSecondListener(t, tt.net, tt.laddr+":"+port, err, l2)
continue
}
tt.net = toudpnet(tt.net)
- port := usableLocalPort(t, tt.net, tt.laddr)
- l1, err := ListenPacket(tt.net, tt.laddr+":"+port)
- if err != nil {
- t.Fatalf("First ListenPacket(%q, %q) failed: %v", tt.net, tt.laddr+":"+port, err)
- }
+ l1, port := usableListenPacketPort(t, tt.net, tt.laddr)
checkFirstListener(t, tt.net, tt.laddr+":"+port, l1)
l2, err := ListenPacket(tt.net, tt.laddr+":"+port)
checkSecondListener(t, tt.net, tt.laddr+":"+port, err, l2)
if tt.ipv6 {
continue
}
- port := usableLocalPort(t, tt.net, tt.laddr)
- l1, err := Listen(tt.net, tt.laddr+":"+port)
- if err != nil {
- t.Fatalf("First Listen(%q, %q) failed: %v", tt.net, tt.laddr+":"+port, err)
- }
+ l1, port := usableListenPort(t, tt.net, tt.laddr)
checkFirstListener(t, tt.net, tt.laddr+":"+port, l1)
l2, err := Listen(tt.net, tt.laddr+":"+port)
checkSecondListener(t, tt.net, tt.laddr+":"+port, err, l2)
continue
}
tt.net = toudpnet(tt.net)
- port := usableLocalPort(t, tt.net, tt.laddr)
- l1, err := ListenPacket(tt.net, tt.laddr+":"+port)
- if err != nil {
- t.Fatalf("First ListenPacket(%q, %q) failed: %v", tt.net, tt.laddr+":"+port, err)
- }
+ l1, port := usableListenPacketPort(t, tt.net, tt.laddr)
checkFirstListener(t, tt.net, tt.laddr+":"+port, l1)
l2, err := ListenPacket(tt.net, tt.laddr+":"+port)
checkSecondListener(t, tt.net, tt.laddr+":"+port, err, l2)
tt.xerr = nil
}
}
- port := usableLocalPort(t, tt.net1, tt.laddr1)
+ l1, port := usableListenPort(t, tt.net1, tt.laddr1)
laddr := tt.laddr1 + ":" + port
- l1, err := Listen(tt.net1, laddr)
- if err != nil {
- t.Fatalf("First Listen(%q, %q) failed: %v", tt.net1, laddr, err)
- }
checkFirstListener(t, tt.net1, laddr, l1)
laddr = tt.laddr2 + ":" + port
l2, err := Listen(tt.net2, laddr)
tt.xerr = nil
}
}
- port := usableLocalPort(t, tt.net1, tt.laddr1)
+ l1, port := usableListenPacketPort(t, tt.net1, tt.laddr1)
laddr := tt.laddr1 + ":" + port
- l1, err := ListenPacket(tt.net1, laddr)
- if err != nil {
- t.Fatalf("First ListenPacket(%q, %q) failed: %v", tt.net1, laddr, err)
- }
checkFirstListener(t, tt.net1, laddr, l1)
laddr = tt.laddr2 + ":" + port
l2, err := ListenPacket(tt.net2, laddr)
}
}
-func usableLocalPort(t *testing.T, net, laddr string) string {
+func usableListenPort(t *testing.T, net, laddr string) (l Listener, port string) {
var nladdr string
+ var err error
switch net {
+ default:
+ panic("usableListenPort net=" + net)
case "tcp", "tcp4", "tcp6":
- l, err := Listen(net, laddr+":0")
+ l, err = Listen(net, laddr+":0")
if err != nil {
t.Fatalf("Probe Listen(%q, %q) failed: %v", net, laddr, err)
}
- defer l.Close()
nladdr = l.(*TCPListener).Addr().String()
+ }
+ _, port, err = SplitHostPort(nladdr)
+ if err != nil {
+ t.Fatalf("SplitHostPort failed: %v", err)
+ }
+ return l, port
+}
+
+func usableListenPacketPort(t *testing.T, net, laddr string) (l PacketConn, port string) {
+ var nladdr string
+ var err error
+ switch net {
+ default:
+ panic("usableListenPacketPort net=" + net)
case "udp", "udp4", "udp6":
- c, err := ListenPacket(net, laddr+":0")
+ l, err = ListenPacket(net, laddr+":0")
if err != nil {
t.Fatalf("Probe ListenPacket(%q, %q) failed: %v", net, laddr, err)
}
- defer c.Close()
- nladdr = c.(*UDPConn).LocalAddr().String()
+ nladdr = l.(*UDPConn).LocalAddr().String()
}
- _, port, err := SplitHostPort(nladdr)
+ _, port, err = SplitHostPort(nladdr)
if err != nil {
t.Fatalf("SplitHostPort failed: %v", err)
}
- return port
+ return l, port
}
func differentWildcardAddr(i, j string) bool {
return
}
- port := usableLocalPort(t, "tcp", "[::]")
- l, err := Listen("tcp", "[::]"+":"+port)
- if err != nil {
- t.Fatalf("Listen failed: %v", err)
- }
+ l, port := usableListenPort(t, "tcp", "[::]")
defer l.Close()
for _, tt := range prohibitionaryDialArgTests {
- _, err = Dial(tt.net, tt.addr+":"+port)
+ _, err := Dial(tt.net, tt.addr+":"+port)
if err == nil {
t.Fatalf("Dial(%q, %q) should fail", tt.net, tt.addr)
}