@@ -13,6 +13,76 @@ import (
13
13
"testing"
14
14
)
15
15
16
+ func benchmarkUDPListener () (net.PacketConn , net.Addr , error ) {
17
+ c , err := net .ListenPacket ("udp4" , "127.0.0.1:0" )
18
+ if err != nil {
19
+ return nil , nil , err
20
+ }
21
+ dst , err := net .ResolveUDPAddr ("udp4" , c .LocalAddr ().String ())
22
+ if err != nil {
23
+ c .Close ()
24
+ return nil , nil , err
25
+ }
26
+ return c , dst , nil
27
+ }
28
+
29
+ func BenchmarkReadWriteNetUDP (b * testing.B ) {
30
+ c , dst , err := benchmarkUDPListener ()
31
+ if err != nil {
32
+ b .Fatalf ("benchmarkUDPListener failed: %v" , err )
33
+ }
34
+ defer c .Close ()
35
+
36
+ wb , rb := []byte ("HELLO-R-U-THERE" ), make ([]byte , 128 )
37
+ b .ResetTimer ()
38
+ for i := 0 ; i < b .N ; i ++ {
39
+ benchmarkReadWriteNetUDP (b , c , wb , rb , dst )
40
+ }
41
+ }
42
+
43
+ func benchmarkReadWriteNetUDP (b * testing.B , c net.PacketConn , wb , rb []byte , dst net.Addr ) {
44
+ if _ , err := c .WriteTo (wb , dst ); err != nil {
45
+ b .Fatalf ("net.PacketConn.WriteTo failed: %v" , err )
46
+ }
47
+ if _ , _ , err := c .ReadFrom (rb ); err != nil {
48
+ b .Fatalf ("net.PacketConn.ReadFrom failed: %v" , err )
49
+ }
50
+ }
51
+
52
+ func BenchmarkReadWriteIPv4UDP (b * testing.B ) {
53
+ c , dst , err := benchmarkUDPListener ()
54
+ if err != nil {
55
+ b .Fatalf ("benchmarkUDPListener failed: %v" , err )
56
+ }
57
+ defer c .Close ()
58
+
59
+ p := ipv4 .NewPacketConn (c )
60
+ cf := ipv4 .FlagTTL | ipv4 .FlagInterface
61
+ if err := p .SetControlMessage (cf , true ); err != nil {
62
+ b .Fatalf ("ipv4.PacketConn.SetControlMessage failed: %v" , err )
63
+ }
64
+ ifi := loopbackInterface ()
65
+
66
+ wb , rb := []byte ("HELLO-R-U-THERE" ), make ([]byte , 128 )
67
+ b .ResetTimer ()
68
+ for i := 0 ; i < b .N ; i ++ {
69
+ benchmarkReadWriteIPv4UDP (b , p , wb , rb , dst , ifi )
70
+ }
71
+ }
72
+
73
+ func benchmarkReadWriteIPv4UDP (b * testing.B , p * ipv4.PacketConn , wb , rb []byte , dst net.Addr , ifi * net.Interface ) {
74
+ cm := ipv4.ControlMessage {TTL : 1 }
75
+ if ifi != nil {
76
+ cm .IfIndex = ifi .Index
77
+ }
78
+ if _ , err := p .WriteTo (wb , & cm , dst ); err != nil {
79
+ b .Fatalf ("ipv4.PacketConn.WriteTo failed: %v" , err )
80
+ }
81
+ if _ , _ , _ , err := p .ReadFrom (rb ); err != nil {
82
+ b .Fatalf ("ipv4.PacketConn.ReadFrom failed: %v" , err )
83
+ }
84
+ }
85
+
16
86
func TestReadWriteUnicastIPPayloadUDP (t * testing.T ) {
17
87
c , err := net .ListenPacket ("udp4" , "127.0.0.1:0" )
18
88
if err != nil {
0 commit comments