W
Size: a a a
S
CF
S
S
CF
А
S
Lr
PT
func bindToDevice(conn net.PacketConn, device string) error {
ptrVal := reflect.ValueOf(conn)
val := reflect.Indirect(ptrVal)
// next line will get you the net.netFD
fdmember := val.FieldByName("fd")
val1 := reflect.Indirect(fdmember)
netFdPtr := val1.FieldByName("sysfd")
l.Info(fmt.Sprintf("device %s, netFdPtr= %+v", device, netFdPtr))
fd := int(netFdPtr.Int())
//fd now has the actual fd for the socket
return syscall.SetsockoptString(fd, syscall.SOL_SOCKET, syscall.SO_BINDTODEVICE, device)
}PT
ВС
ВЩ
go test ./... модули будут запускаться параллельно?PT
ipAddr := &net.IPAddr{IP: net.IPv6linklocalallrouters, Zone: "tap" + s.name}
conn, err := net.ListenIP("ip6:58", ipAddr)
if err != nil {
l.Info("error: " + err.Error())
return
}
defer conn.Close()
if err = bindToDevice(conn, "tap"+s.name); err != nil {ВС
PT