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 {
|
func run(opt options) error {
|
||||||
conn, err := packet.ListenPort(opt.Port)
|
conn, err := packet.Listen(opt.Group, opt.Port, opt.Ifs...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
for _, iface := range opt.Ifs {
|
|
||||||
if err = conn.JoinGroup(iface, opt.Group); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buf := [4096]byte{}
|
buf := [4096]byte{}
|
||||||
var s tlv.PacketDecoder
|
var s tlv.PacketDecoder
|
||||||
|
|
|
@ -18,6 +18,19 @@ type Conn struct {
|
||||||
v6pc *ipv6.PacketConn
|
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) {
|
func ListenPort(port uint16) (Conn, error) {
|
||||||
var c Conn
|
var c Conn
|
||||||
|
|
||||||
|
@ -27,7 +40,9 @@ func ListenPort(port uint16) (Conn, error) {
|
||||||
}
|
}
|
||||||
c.v6pc = ipv6.NewPacketConn(uc)
|
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 {
|
func (c Conn) Close() error {
|
||||||
|
|
Loading…
Reference in New Issue