@@ -14,6 +14,7 @@ import (
14
14
"unsafe"
15
15
16
16
"golang.org/x/sys/unix"
17
+ "golang.zx2c4.com/go118/netip"
17
18
)
18
19
19
20
type ipv4Source struct {
@@ -70,32 +71,30 @@ var _ Bind = (*LinuxSocketBind)(nil)
70
71
71
72
func (* LinuxSocketBind ) ParseEndpoint (s string ) (Endpoint , error ) {
72
73
var end LinuxSocketEndpoint
73
- addr , err := parseEndpoint (s )
74
+ e , err := netip . ParseAddrPort (s )
74
75
if err != nil {
75
76
return nil , err
76
77
}
77
78
78
- ipv4 := addr .IP .To4 ()
79
- if ipv4 != nil {
79
+ if e .Addr ().Is4 () {
80
80
dst := end .dst4 ()
81
81
end .isV6 = false
82
- dst .Port = addr .Port
83
- copy ( dst .Addr [:], ipv4 )
82
+ dst .Port = int ( e .Port ())
83
+ dst .Addr = e . Addr (). As4 ( )
84
84
end .ClearSrc ()
85
85
return & end , nil
86
86
}
87
87
88
- ipv6 := addr .IP .To16 ()
89
- if ipv6 != nil {
90
- zone , err := zoneToUint32 (addr .Zone )
88
+ if e .Addr ().Is6 () {
89
+ zone , err := zoneToUint32 (e .Addr ().Zone ())
91
90
if err != nil {
92
91
return nil , err
93
92
}
94
93
dst := end .dst6 ()
95
94
end .isV6 = true
96
- dst .Port = addr .Port
95
+ dst .Port = int ( e .Port ())
97
96
dst .ZoneId = zone
98
- copy ( dst .Addr [:], ipv6 [:] )
97
+ dst .Addr = e . Addr (). As16 ( )
99
98
end .ClearSrc ()
100
99
return & end , nil
101
100
}
@@ -266,29 +265,19 @@ func (bind *LinuxSocketBind) Send(buff []byte, end Endpoint) error {
266
265
}
267
266
}
268
267
269
- func (end * LinuxSocketEndpoint ) SrcIP () net. IP {
268
+ func (end * LinuxSocketEndpoint ) SrcIP () netip. Addr {
270
269
if ! end .isV6 {
271
- return net .IPv4 (
272
- end .src4 ().Src [0 ],
273
- end .src4 ().Src [1 ],
274
- end .src4 ().Src [2 ],
275
- end .src4 ().Src [3 ],
276
- )
270
+ return netip .AddrFrom4 (end .src4 ().Src )
277
271
} else {
278
- return end .src6 ().src [:]
272
+ return netip . AddrFrom16 ( end .src6 ().src )
279
273
}
280
274
}
281
275
282
- func (end * LinuxSocketEndpoint ) DstIP () net. IP {
276
+ func (end * LinuxSocketEndpoint ) DstIP () netip. Addr {
283
277
if ! end .isV6 {
284
- return net .IPv4 (
285
- end .dst4 ().Addr [0 ],
286
- end .dst4 ().Addr [1 ],
287
- end .dst4 ().Addr [2 ],
288
- end .dst4 ().Addr [3 ],
289
- )
278
+ return netip .AddrFrom4 (end .src4 ().Src )
290
279
} else {
291
- return end .dst6 ().Addr [:]
280
+ return netip . AddrFrom16 ( end .dst6 ().Addr )
292
281
}
293
282
}
294
283
@@ -305,14 +294,13 @@ func (end *LinuxSocketEndpoint) SrcToString() string {
305
294
}
306
295
307
296
func (end * LinuxSocketEndpoint ) DstToString () string {
308
- var udpAddr net.UDPAddr
309
- udpAddr .IP = end .DstIP ()
297
+ var port int
310
298
if ! end .isV6 {
311
- udpAddr . Port = end .dst4 ().Port
299
+ port = end .dst4 ().Port
312
300
} else {
313
- udpAddr . Port = end .dst6 ().Port
301
+ port = end .dst6 ().Port
314
302
}
315
- return udpAddr .String ()
303
+ return netip . AddrPortFrom ( end . DstIP (), uint16 ( port )) .String ()
316
304
}
317
305
318
306
func (end * LinuxSocketEndpoint ) ClearDst () {
0 commit comments