@@ -14,6 +14,7 @@ import (
1414 "unsafe"
1515
1616 "golang.org/x/sys/unix"
17+ "golang.zx2c4.com/go118/netip"
1718)
1819
1920type ipv4Source struct {
@@ -70,32 +71,30 @@ var _ Bind = (*LinuxSocketBind)(nil)
7071
7172func (* LinuxSocketBind ) ParseEndpoint (s string ) (Endpoint , error ) {
7273 var end LinuxSocketEndpoint
73- addr , err := parseEndpoint (s )
74+ e , err := netip . ParseAddrPort (s )
7475 if err != nil {
7576 return nil , err
7677 }
7778
78- ipv4 := addr .IP .To4 ()
79- if ipv4 != nil {
79+ if e .Addr ().Is4 () {
8080 dst := end .dst4 ()
8181 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 ( )
8484 end .ClearSrc ()
8585 return & end , nil
8686 }
8787
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 ())
9190 if err != nil {
9291 return nil , err
9392 }
9493 dst := end .dst6 ()
9594 end .isV6 = true
96- dst .Port = addr .Port
95+ dst .Port = int ( e .Port ())
9796 dst .ZoneId = zone
98- copy ( dst .Addr [:], ipv6 [:] )
97+ dst .Addr = e . Addr (). As16 ( )
9998 end .ClearSrc ()
10099 return & end , nil
101100 }
@@ -266,29 +265,19 @@ func (bind *LinuxSocketBind) Send(buff []byte, end Endpoint) error {
266265 }
267266}
268267
269- func (end * LinuxSocketEndpoint ) SrcIP () net. IP {
268+ func (end * LinuxSocketEndpoint ) SrcIP () netip. Addr {
270269 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 )
277271 } else {
278- return end .src6 ().src [:]
272+ return netip . AddrFrom16 ( end .src6 ().src )
279273 }
280274}
281275
282- func (end * LinuxSocketEndpoint ) DstIP () net. IP {
276+ func (end * LinuxSocketEndpoint ) DstIP () netip. Addr {
283277 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 )
290279 } else {
291- return end .dst6 ().Addr [:]
280+ return netip . AddrFrom16 ( end .dst6 ().Addr )
292281 }
293282}
294283
@@ -305,14 +294,13 @@ func (end *LinuxSocketEndpoint) SrcToString() string {
305294}
306295
307296func (end * LinuxSocketEndpoint ) DstToString () string {
308- var udpAddr net.UDPAddr
309- udpAddr .IP = end .DstIP ()
297+ var port int
310298 if ! end .isV6 {
311- udpAddr . Port = end .dst4 ().Port
299+ port = end .dst4 ().Port
312300 } else {
313- udpAddr . Port = end .dst6 ().Port
301+ port = end .dst6 ().Port
314302 }
315- return udpAddr .String ()
303+ return netip . AddrPortFrom ( end . DstIP (), uint16 ( port )) .String ()
316304}
317305
318306func (end * LinuxSocketEndpoint ) ClearDst () {
0 commit comments