@@ -12,13 +12,28 @@ import (
12
12
"unsafe"
13
13
)
14
14
15
+ var freebsd32o64 bool
16
+
15
17
func setsockoptGroupReq (fd int , opt * sockOpt , ifi * net.Interface , grp net.IP ) error {
16
18
var gr sysGroupReq
17
19
if ifi != nil {
18
20
gr .Interface = uint32 (ifi .Index )
19
21
}
20
22
gr .setGroup (grp )
21
- return os .NewSyscallError ("setsockopt" , setsockopt (fd , opt .level , opt .name , unsafe .Pointer (& gr ), sysSizeofGroupReq ))
23
+ var p unsafe.Pointer
24
+ var l sysSockoptLen
25
+ if freebsd32o64 {
26
+ var d [sysSizeofGroupReq + 4 ]byte
27
+ s := (* [sysSizeofGroupReq ]byte )(unsafe .Pointer (& gr ))
28
+ copy (d [:4 ], s [:4 ])
29
+ copy (d [8 :], s [4 :])
30
+ p = unsafe .Pointer (& d [0 ])
31
+ l = sysSizeofGroupReq + 4
32
+ } else {
33
+ p = unsafe .Pointer (& gr )
34
+ l = sysSizeofGroupReq
35
+ }
36
+ return os .NewSyscallError ("setsockopt" , setsockopt (fd , opt .level , opt .name , p , l ))
22
37
}
23
38
24
39
func setsockoptGroupSourceReq (fd int , opt * sockOpt , ifi * net.Interface , grp , src net.IP ) error {
@@ -27,5 +42,18 @@ func setsockoptGroupSourceReq(fd int, opt *sockOpt, ifi *net.Interface, grp, src
27
42
gsr .Interface = uint32 (ifi .Index )
28
43
}
29
44
gsr .setSourceGroup (grp , src )
30
- return os .NewSyscallError ("setsockopt" , setsockopt (fd , opt .level , opt .name , unsafe .Pointer (& gsr ), sysSizeofGroupSourceReq ))
45
+ var p unsafe.Pointer
46
+ var l sysSockoptLen
47
+ if freebsd32o64 {
48
+ var d [sysSizeofGroupSourceReq + 4 ]byte
49
+ s := (* [sysSizeofGroupSourceReq ]byte )(unsafe .Pointer (& gsr ))
50
+ copy (d [:4 ], s [:4 ])
51
+ copy (d [8 :], s [4 :])
52
+ p = unsafe .Pointer (& d [0 ])
53
+ l = sysSizeofGroupSourceReq + 4
54
+ } else {
55
+ p = unsafe .Pointer (& gsr )
56
+ l = sysSizeofGroupSourceReq
57
+ }
58
+ return os .NewSyscallError ("setsockopt" , setsockopt (fd , opt .level , opt .name , p , l ))
31
59
}
0 commit comments