@@ -16,77 +16,47 @@ import (
1616"golang.org/x/net/ipv4"
1717)
1818
19- func benchmarkUDPListener () (net. PacketConn , net. Addr , error ) {
20- c , err := net . ListenPacket ("udp4" , "127.0.0.1:0 " )
19+ func BenchmarkReadWriteUnicast ( b * testing. B ) {
20+ c , err := nettest . NewLocalPacketListener ("udp4" )
2121if err != nil {
22- return nil , nil , err
23- }
24- dst , err := net .ResolveUDPAddr ("udp4" , c .LocalAddr ().String ())
25- if err != nil {
26- c .Close ()
27- return nil , nil , err
28- }
29- return c , dst , nil
30- }
31-
32- func BenchmarkReadWriteNetUDP (b * testing.B ) {
33- c , dst , err := benchmarkUDPListener ()
34- if err != nil {
35- b .Fatal (err )
22+ b .Skipf ("not supported on %s/%s: %v" , runtime .GOOS , runtime .GOARCH , err )
3623}
3724defer c .Close ()
3825
26+ dst := c .LocalAddr ()
3927wb , rb := []byte ("HELLO-R-U-THERE" ), make ([]byte , 128 )
40- b .ResetTimer ()
41- for i := 0 ; i < b .N ; i ++ {
42- benchmarkReadWriteNetUDP (b , c , wb , rb , dst )
43- }
44- }
45-
46- func benchmarkReadWriteNetUDP (b * testing.B , c net.PacketConn , wb , rb []byte , dst net.Addr ) {
47- if _ , err := c .WriteTo (wb , dst ); err != nil {
48- b .Fatal (err )
49- }
50- if _ , _ , err := c .ReadFrom (rb ); err != nil {
51- b .Fatal (err )
52- }
53- }
54-
55- func BenchmarkReadWriteIPv4UDP (b * testing.B ) {
56- c , dst , err := benchmarkUDPListener ()
57- if err != nil {
58- b .Fatal (err )
59- }
60- defer c .Close ()
61-
62- p := ipv4 .NewPacketConn (c )
63- defer p .Close ()
64- cf := ipv4 .FlagTTL | ipv4 .FlagInterface
65- if err := p .SetControlMessage (cf , true ); err != nil {
66- b .Fatal (err )
67- }
68- ifi := nettest .RoutedInterface ("ip4" , net .FlagUp | net .FlagLoopback )
6928
70- wb , rb := []byte ("HELLO-R-U-THERE" ), make ([]byte , 128 )
71- b .ResetTimer ()
72- for i := 0 ; i < b .N ; i ++ {
73- benchmarkReadWriteIPv4UDP (b , p , wb , rb , dst , ifi )
74- }
75- }
29+ b .Run ("NetUDP" , func (b * testing.B ) {
30+ for i := 0 ; i < b .N ; i ++ {
31+ if _ , err := c .WriteTo (wb , dst ); err != nil {
32+ b .Fatal (err )
33+ }
34+ if _ , _ , err := c .ReadFrom (rb ); err != nil {
35+ b .Fatal (err )
36+ }
37+ }
38+ })
39+ b .Run ("IPv4UDP" , func (b * testing.B ) {
40+ p := ipv4 .NewPacketConn (c )
41+ cf := ipv4 .FlagTTL | ipv4 .FlagInterface
42+ if err := p .SetControlMessage (cf , true ); err != nil {
43+ b .Fatal (err )
44+ }
45+ cm := ipv4.ControlMessage {TTL : 1 }
46+ ifi := nettest .RoutedInterface ("ip4" , net .FlagUp | net .FlagLoopback )
47+ if ifi != nil {
48+ cm .IfIndex = ifi .Index
49+ }
7650
77- func benchmarkReadWriteIPv4UDP (b * testing.B , p * ipv4.PacketConn , wb , rb []byte , dst net.Addr , ifi * net.Interface ) {
78- cm := ipv4.ControlMessage {TTL : 1 }
79- if ifi != nil {
80- cm .IfIndex = ifi .Index
81- }
82- if n , err := p .WriteTo (wb , & cm , dst ); err != nil {
83- b .Fatal (err )
84- } else if n != len (wb ) {
85- b .Fatalf ("got %v; want %v" , n , len (wb ))
86- }
87- if _ , _ , _ , err := p .ReadFrom (rb ); err != nil {
88- b .Fatal (err )
89- }
51+ for i := 0 ; i < b .N ; i ++ {
52+ if _ , err := p .WriteTo (wb , & cm , dst ); err != nil {
53+ b .Fatal (err )
54+ }
55+ if _ , _ , _ , err := p .ReadFrom (rb ); err != nil {
56+ b .Fatal (err )
57+ }
58+ }
59+ })
9060}
9161
9262func TestPacketConnConcurrentReadWriteUnicastUDP (t * testing.T ) {
@@ -95,19 +65,15 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
9565t .Skipf ("not supported on %s" , runtime .GOOS )
9666}
9767
98- c , err := net . ListenPacket ("udp4" , "127.0.0.1:0 " )
68+ c , err := nettest . NewLocalPacketListener ("udp4" )
9969if err != nil {
10070t .Fatal (err )
10171}
10272defer c .Close ()
10373p := ipv4 .NewPacketConn (c )
10474defer p .Close ()
10575
106- dst , err := net .ResolveUDPAddr ("udp4" , c .LocalAddr ().String ())
107- if err != nil {
108- t .Fatal (err )
109- }
110-
76+ dst := c .LocalAddr ()
11177ifi := nettest .RoutedInterface ("ip4" , net .FlagUp | net .FlagLoopback )
11278cf := ipv4 .FlagTTL | ipv4 .FlagSrc | ipv4 .FlagDst | ipv4 .FlagInterface
11379wb := []byte ("HELLO-R-U-THERE" )
@@ -152,7 +118,7 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
152118t .Error (err )
153119return
154120} else if n != len (wb ) {
155- t .Errorf ("short write: %v " , n )
121+ t .Errorf ("got %d; want %d " , n , len ( wb ) )
156122return
157123}
158124}
0 commit comments