Skip to content
This repository was archived by the owner on Jan 16, 2022. It is now read-only.

Commit 294479d

Browse files
authored
Merge pull request #20 from libp2p/fix/19
fix: allocate "any" socket type then cast
2 parents d0ced09 + e4f0a92 commit 294479d

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

sockaddr_windows.go

+15-11
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,34 @@ func sockaddrToAny(sa windows.Sockaddr) (*windows.RawSockaddrAny, Socklen, error
1717
if sa.Port < 0 || sa.Port > 0xFFFF {
1818
return nil, 0, syscall.EINVAL
1919
}
20-
var raw windows.RawSockaddrInet4
21-
raw.Family = windows.AF_INET
22-
p := (*[2]byte)(unsafe.Pointer(&raw.Port))
20+
21+
raw := new(windows.RawSockaddrAny)
22+
raw.Addr.Family = windows.AF_INET
23+
raw4 := (*windows.RawSockaddrInet4)(unsafe.Pointer(raw))
24+
p := (*[2]byte)(unsafe.Pointer(&raw4.Port))
2325
p[0] = byte(sa.Port >> 8)
2426
p[1] = byte(sa.Port)
2527
for i := 0; i < len(sa.Addr); i++ {
26-
raw.Addr[i] = sa.Addr[i]
28+
raw4.Addr[i] = sa.Addr[i]
2729
}
28-
return (*windows.RawSockaddrAny)(unsafe.Pointer(&raw)), Socklen(unsafe.Sizeof(raw)), nil
30+
return raw, Socklen(unsafe.Sizeof(*raw4)), nil
2931

3032
case *windows.SockaddrInet6:
3133
if sa.Port < 0 || sa.Port > 0xFFFF {
3234
return nil, 0, syscall.EINVAL
3335
}
34-
var raw windows.RawSockaddrInet6
35-
raw.Family = windows.AF_INET6
36-
p := (*[2]byte)(unsafe.Pointer(&raw.Port))
36+
37+
raw := new(windows.RawSockaddrAny)
38+
raw.Addr.Family = windows.AF_INET6
39+
raw6 := (*windows.RawSockaddrInet6)(unsafe.Pointer(raw))
40+
p := (*[2]byte)(unsafe.Pointer(&raw6.Port))
3741
p[0] = byte(sa.Port >> 8)
3842
p[1] = byte(sa.Port)
39-
raw.Scope_id = sa.ZoneId
43+
raw6.Scope_id = sa.ZoneId
4044
for i := 0; i < len(sa.Addr); i++ {
41-
raw.Addr[i] = sa.Addr[i]
45+
raw6.Addr[i] = sa.Addr[i]
4246
}
43-
return (*windows.RawSockaddrAny)(unsafe.Pointer(&raw)), Socklen(unsafe.Sizeof(raw)), nil
47+
return raw, Socklen(unsafe.Sizeof(*raw6)), nil
4448

4549
case *windows.SockaddrUnix:
4650
return nil, 0, syscall.EWINDOWS

0 commit comments

Comments
 (0)