simplify setting up the network connection
This commit is contained in:
parent
3983700788
commit
f45a5665cf
7
main.go
7
main.go
|
@ -28,16 +28,11 @@ func parseOpts() (options, error) {
|
|||
}
|
||||
|
||||
func run(opt options) error {
|
||||
conn, err := packet.ListenPort(opt.Port)
|
||||
conn, err := packet.Listen(opt.Group, opt.Port, opt.Ifs...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer conn.Close()
|
||||
for _, iface := range opt.Ifs {
|
||||
if err = conn.JoinGroup(iface, opt.Group); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
buf := [4096]byte{}
|
||||
var s tlv.PacketDecoder
|
||||
|
|
|
@ -18,6 +18,19 @@ type Conn struct {
|
|||
v6pc *ipv6.PacketConn
|
||||
}
|
||||
|
||||
func Listen(group string, port uint16, ifaces ...string) (Conn, error) {
|
||||
conn, err := ListenPort(port)
|
||||
if err != nil {
|
||||
return Conn{}, err
|
||||
}
|
||||
for _, iface := range ifaces {
|
||||
if err = conn.JoinGroup(iface, group); err != nil {
|
||||
conn.Close()
|
||||
return Conn{}, err
|
||||
}
|
||||
}
|
||||
return conn, nil
|
||||
}
|
||||
func ListenPort(port uint16) (Conn, error) {
|
||||
var c Conn
|
||||
|
||||
|
@ -27,7 +40,9 @@ func ListenPort(port uint16) (Conn, error) {
|
|||
}
|
||||
c.v6pc = ipv6.NewPacketConn(uc)
|
||||
|
||||
return c, c.v6pc.SetControlMessage(ipv6.FlagDst, true)
|
||||
return c, c.v6pc.SetControlMessage(
|
||||
ipv6.FlagDst|ipv6.FlagTrafficClass|ipv6.FlagHopLimit|ipv6.FlagPathMTU,
|
||||
true)
|
||||
}
|
||||
|
||||
func (c Conn) Close() error {
|
||||
|
|
Loading…
Reference in New Issue