package net
import (
- "context"
"fmt"
"internal/testenv"
"os"
if !testableNetwork(network) {
continue
}
- ln := newLocalListener(t, network)
- address := ln.Addr().String()
- // TODO: This is racy. The selected address could be reused in between
- // this Close and the subsequent Listen.
- ln.Close()
- lc := ListenConfig{Control: controlOnConnSetup}
- ln, err := lc.Listen(context.Background(), network, address)
- if err != nil {
- t.Error(err)
- continue
- }
+ ln := newLocalListener(t, network, &ListenConfig{Control: controlOnConnSetup})
ln.Close()
}
})
if !testableNetwork(network) {
continue
}
- c := newLocalPacketListener(t, network)
- address := c.LocalAddr().String()
- // TODO: This is racy. The selected address could be reused in between
- // this Close and the subsequent ListenPacket.
- c.Close()
- if network == "unixgram" {
- os.Remove(address)
- }
- lc := ListenConfig{Control: controlOnConnSetup}
- c, err := lc.ListenPacket(context.Background(), network, address)
- if err != nil {
- t.Error(err)
- continue
- }
+ c := newLocalPacketListener(t, network, &ListenConfig{Control: controlOnConnSetup})
c.Close()
- if network == "unixgram" {
- os.Remove(address)
- }
}
})
}
package net
import (
+ "context"
"errors"
"fmt"
"os"
return filepath.Join(d, "sock")
}
-func newLocalListener(t testing.TB, network string) Listener {
+func newLocalListener(t testing.TB, network string, lcOpt ...*ListenConfig) Listener {
+ var lc *ListenConfig
+ switch len(lcOpt) {
+ case 0:
+ lc = new(ListenConfig)
+ case 1:
+ lc = lcOpt[0]
+ default:
+ t.Helper()
+ t.Fatal("too many ListenConfigs passed to newLocalListener: want 0 or 1")
+ }
+
listen := func(net, addr string) Listener {
- ln, err := Listen(net, addr)
+ ln, err := lc.Listen(context.Background(), net, addr)
if err != nil {
t.Helper()
t.Fatal(err)
}
}
-func newLocalPacketListener(t testing.TB, network string) PacketConn {
+func newLocalPacketListener(t testing.TB, network string, lcOpt ...*ListenConfig) PacketConn {
+ var lc *ListenConfig
+ switch len(lcOpt) {
+ case 0:
+ lc = new(ListenConfig)
+ case 1:
+ lc = lcOpt[0]
+ default:
+ t.Helper()
+ t.Fatal("too many ListenConfigs passed to newLocalListener: want 0 or 1")
+ }
+
listenPacket := func(net, addr string) PacketConn {
- c, err := ListenPacket(net, addr)
+ c, err := lc.ListenPacket(context.Background(), net, addr)
if err != nil {
t.Helper()
t.Fatal(err)