本文整理汇总了Golang中golang.org/x/net/ipv4.NewPacketConn函数的典型用法代码示例。如果您正苦于以下问题:Golang NewPacketConn函数的具体用法?Golang NewPacketConn怎么用?Golang NewPacketConn使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewPacketConn函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestUDPMultiplePacketConnWithMultipleGroupListeners
func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
t.Skip("to avoid external network")
}
for _, gaddr := range udpMultipleGroupListenerTests {
c1, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port
if err != nil {
t.Fatal(err)
}
defer c1.Close()
c2, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port
if err != nil {
t.Fatal(err)
}
defer c2.Close()
var ps [2]*ipv4.PacketConn
ps[0] = ipv4.NewPacketConn(c1)
ps[1] = ipv4.NewPacketConn(c2)
var mift []*net.Interface
ift, err := net.Interfaces()
if err != nil {
t.Fatal(err)
}
for i, ifi := range ift {
if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
continue
}
for _, p := range ps {
if err := p.JoinGroup(&ifi, gaddr); err != nil {
t.Fatal(err)
}
}
mift = append(mift, &ift[i])
}
for _, ifi := range mift {
for _, p := range ps {
if err := p.LeaveGroup(ifi, gaddr); err != nil {
t.Fatal(err)
}
}
}
}
}
开发者ID:mozilla,项目名称:tls-observatory,代码行数:51,代码来源:multicastlistener_test.go
示例2: testOSVM
// testOSVM creates a virtualMachine which uses the OS's BPF VM by injecting
// packets into a UDP listener with a BPF program attached to it.
func testOSVM(t *testing.T, filter []bpf.Instruction) (virtualMachine, func()) {
l, err := net.ListenPacket("udp4", "127.0.0.1:0")
if err != nil {
t.Fatalf("failed to open OS VM UDP listener: %v", err)
}
prog, err := bpf.Assemble(filter)
if err != nil {
t.Fatalf("failed to compile BPF program: %v", err)
}
p := ipv4.NewPacketConn(l)
if err = p.SetBPF(prog); err != nil {
t.Fatalf("failed to attach BPF program to listener: %v", err)
}
s, err := net.Dial("udp4", l.LocalAddr().String())
if err != nil {
t.Fatalf("failed to dial connection to listener: %v", err)
}
done := func() {
_ = s.Close()
_ = l.Close()
}
return &osVirtualMachine{
l: l,
s: s,
}, done
}
开发者ID:Requilence,项目名称:integram,代码行数:33,代码来源:vm_bpf_test.go
示例3: NewHTTPUClient
// NewHTTPUClient creates a new HTTPUClient, opening up a new UDP socket for the
// purpose.
func NewHTTPUClient() (*HTTPUClient, error) {
conn, err := net.ListenPacket("udp4", ":0")
if err != nil {
return nil, err
}
return &HTTPUClient{conn: ipv4.NewPacketConn(conn)}, nil
}
开发者ID:fangdingjun,项目名称:goupnp,代码行数:9,代码来源:httpu.go
示例4: ServeIf
// ServeIf does the same job as Serve(), but listens and responds on the
// specified network interface (by index). It also doubles as an example of
// how to leverage the dhcp4.ServeConn interface.
//
// If your target only has one interface, use Serve(). ServeIf() requires an
// import outside the std library. Serving DHCP over multiple interfaces will
// require your own dhcp4.ServeConn, as listening to broadcasts utilises all
// interfaces (so you cannot have more than on listener).
func ServeIf(ifIndex int, conn net.PacketConn, handler Handler) error {
p := ipv4.NewPacketConn(conn)
if err := p.SetControlMessage(ipv4.FlagInterface, true); err != nil {
return err
}
return Serve(&serveIfConn{ifIndex: ifIndex, conn: p}, handler)
}
开发者ID:asaif,项目名称:dhcp4,代码行数:15,代码来源:serverif.go
示例5: mcastOpen
func mcastOpen(bindAddr net.IP, port int, ifname string) (*ipv4.PacketConn, *net.UDPConn, error) {
s, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, syscall.IPPROTO_UDP)
if err != nil {
log.Fatal(err)
}
if err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil {
log.Fatal(err)
}
//syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEPORT, 1)
if err := syscall.SetsockoptString(s, syscall.SOL_SOCKET, syscall.SO_BINDTODEVICE, ifname); err != nil {
log.Fatal(err)
}
lsa := syscall.SockaddrInet4{Port: port}
copy(lsa.Addr[:], bindAddr.To4())
if err := syscall.Bind(s, &lsa); err != nil {
syscall.Close(s)
log.Fatal(err)
}
f := os.NewFile(uintptr(s), "")
c, err := net.FilePacketConn(f)
f.Close()
if err != nil {
log.Fatal(err)
}
u := c.(*net.UDPConn)
p := ipv4.NewPacketConn(c)
return p, u, nil
}
开发者ID:udhos,项目名称:nexthop,代码行数:31,代码来源:mcast_listener.go
示例6: TestSetICMPFilter
func TestSetICMPFilter(t *testing.T) {
switch runtime.GOOS {
case "linux":
default:
t.Skipf("not supported on %q", runtime.GOOS)
}
if os.Getuid() != 0 {
t.Skip("must be root")
}
c, err := net.ListenPacket("ip4:icmp", "127.0.0.1")
if err != nil {
t.Fatal(err)
}
defer c.Close()
p := ipv4.NewPacketConn(c)
var f ipv4.ICMPFilter
f.SetAll(true)
f.Accept(ipv4.ICMPTypeEcho)
f.Accept(ipv4.ICMPTypeEchoReply)
if err := p.SetICMPFilter(&f); err != nil {
t.Fatal(err)
}
kf, err := p.ICMPFilter()
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(kf, &f) {
t.Fatalf("got %#v; want %#v", kf, f)
}
}
开发者ID:pondyond,项目名称:leanote-all,代码行数:33,代码来源:icmp_test.go
示例7: main
func main() {
flag.Parse()
c, err := net.ListenPacket("udp", net.JoinHostPort(*group, "0"))
if err != nil {
log.Fatal(err)
}
p := ipv4.NewPacketConn(c)
defer p.Close()
dst, err := net.ResolveUDPAddr("udp", net.JoinHostPort(*group, *port))
if err != nil {
log.Fatal(err)
}
log.Println(c.LocalAddr())
go sender(p, dst)
sig := make(chan os.Signal)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
for {
select {
case <-sig:
os.Exit(0)
}
}
}
开发者ID:jordan2175,项目名称:-stdyng,代码行数:26,代码来源:main.go
示例8: TestPacketConnUnicastSocketOptions
func TestPacketConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9":
t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
if ifi == nil {
t.Skipf("not available on %s", runtime.GOOS)
}
m, ok := nettest.SupportsRawIPSocket()
for _, tt := range packetConnUnicastSocketOptionTests {
if tt.net == "ip4" && !ok {
t.Log(m)
continue
}
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
if err != nil {
t.Fatal(err)
}
defer c.Close()
testUnicastSocketOptions(t, ipv4.NewPacketConn(c))
}
}
开发者ID:Requilence,项目名称:integram,代码行数:25,代码来源:unicastsockopt_test.go
示例9: Start
func (s *serfDiscovery) Start() error {
conn, err := net.ListenPacket("udp4", "0.0.0.0:1024")
if err != nil {
return err
}
s.pconn = ipv4.NewPacketConn(conn)
if err := s.pconn.JoinGroup(s.iface, &net.UDPAddr{IP: s.group}); err != nil {
conn.Close()
return err
}
if err := s.pconn.SetControlMessage(ipv4.FlagDst, true); err != nil {
conn.Close()
return err
}
go func() {
<-s.stop
conn.Close()
}()
go func() {
b := make([]byte, 1500)
for {
_, cm, src, err := s.pconn.ReadFrom(b)
if err != nil {
if strings.Contains(err.Error(), "closed network connection") {
log.Printf("Closed connection, stopping discovery listener...")
return
}
log.Printf("Failed to read packet: %s", err)
continue
}
if cm.Dst.IsMulticast() {
if cm.Dst.Equal(s.group) {
sip, _, err := net.SplitHostPort(src.String())
if err != nil {
log.Printf("Multicast src '%s' has unexpected format: %s", src, err)
}
if sip == s.self.String() {
continue
}
err = s.serf.Join(sip)
if err != nil {
log.Printf("Failed to join serf gossip at '%s': %s ", sip, err)
}
} else {
continue
}
}
}
}()
return nil
}
开发者ID:cellstate,项目名称:cell,代码行数:60,代码来源:discovery.go
示例10: TestPacketConnMulticastSocketOptions
func TestPacketConnMulticastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris":
t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
t.Skipf("not available on %s", runtime.GOOS)
}
m, ok := nettest.SupportsRawIPSocket()
for _, tt := range packetConnMulticastSocketOptionTests {
if tt.net == "ip4" && !ok {
t.Log(m)
continue
}
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
if err != nil {
t.Fatal(err)
}
defer c.Close()
p := ipv4.NewPacketConn(c)
defer p.Close()
if tt.src == nil {
testMulticastSocketOptions(t, p, ifi, tt.grp)
} else {
testSourceSpecificMulticastSocketOptions(t, p, ifi, tt.grp, tt.src)
}
}
}
开发者ID:2722,项目名称:lantern,代码行数:31,代码来源:multicastsockopt_test.go
示例11: ListenPacket
// ListenPacket listens for incoming ICMP packets addressed to
// address. See net.Dial for the syntax of address.
//
// For non-privileged datagram-oriented ICMP endpoints, network must
// be "udp4" or "udp6". The endpoint allows to read, write a few
// limited ICMP messages such as echo request and echo reply.
// Currently only Darwin and Linux support this.
//
// Examples:
// ListenPacket("udp4", "192.168.0.1")
// ListenPacket("udp4", "0.0.0.0")
// ListenPacket("udp6", "fe80::1%en0")
// ListenPacket("udp6", "::")
//
// For privileged raw ICMP endpoints, network must be "ip4" or "ip6"
// followed by a colon and an ICMP protocol number or name.
//
// Examples:
// ListenPacket("ip4:icmp", "192.168.0.1")
// ListenPacket("ip4:1", "0.0.0.0")
// ListenPacket("ip6:ipv6-icmp", "fe80::1%en0")
// ListenPacket("ip6:58", "::")
func ListenPacket(network, address string) (*PacketConn, error) {
var family, proto int
switch network {
case "udp4":
family, proto = syscall.AF_INET, iana.ProtocolICMP
case "udp6":
family, proto = syscall.AF_INET6, iana.ProtocolIPv6ICMP
default:
i := last(network, ':')
switch network[:i] {
case "ip4":
proto = iana.ProtocolICMP
case "ip6":
proto = iana.ProtocolIPv6ICMP
}
}
var cerr error
var c net.PacketConn
switch family {
case syscall.AF_INET, syscall.AF_INET6:
s, err := syscall.Socket(family, syscall.SOCK_DGRAM, proto)
if err != nil {
return nil, os.NewSyscallError("socket", err)
}
if runtime.GOOS == "darwin" && family == syscall.AF_INET {
if err := syscall.SetsockoptInt(s, iana.ProtocolIP, sysIP_STRIPHDR, 1); err != nil {
syscall.Close(s)
return nil, os.NewSyscallError("setsockopt", err)
}
}
sa, err := sockaddr(family, address)
if err != nil {
syscall.Close(s)
return nil, err
}
if err := syscall.Bind(s, sa); err != nil {
syscall.Close(s)
return nil, os.NewSyscallError("bind", err)
}
f := os.NewFile(uintptr(s), "datagram-oriented icmp")
c, cerr = net.FilePacketConn(f)
f.Close()
default:
c, cerr = net.ListenPacket(network, address)
}
if cerr != nil {
return nil, cerr
}
switch proto {
case iana.ProtocolICMP:
return &PacketConn{c: c, p4: ipv4.NewPacketConn(c)}, nil
case iana.ProtocolIPv6ICMP:
return &PacketConn{c: c, p6: ipv6.NewPacketConn(c)}, nil
default:
return &PacketConn{c: c}, nil
}
}
开发者ID:Rudloff,项目名称:platform,代码行数:79,代码来源:listen_posix.go
示例12: MulticastListener
func MulticastListener(port int, ifname string) (*MulticastSock, error) {
/*
s, err1 := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, syscall.IPPROTO_UDP)
if err1 != nil {
return nil, fmt.Errorf("MulticastListener: could not create socket(port=%d,ifname=%s): %v", port, ifname, err1)
}
if err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil {
syscall.Close(s)
return nil, fmt.Errorf("MulticastListener: could not set reuse addr socket(port=%d,ifname=%s): %v", port, ifname, err)
}
if ifname != "" {
if err := syscall.SetsockoptString(s, syscall.SOL_SOCKET, syscall.SO_BINDTODEVICE, ifname); err != nil {
syscall.Close(s)
return nil, fmt.Errorf("MulticastListener: could not bind to device socket(port=%d,ifname=%s): %v", port, ifname, err)
}
}
bindAddr := net.IP(net.IPv4(0, 0, 0, 0))
lsa := syscall.SockaddrInet4{Port: port}
copy(lsa.Addr[:], bindAddr.To4())
if err := syscall.Bind(s, &lsa); err != nil {
syscall.Close(s)
return nil, fmt.Errorf("MulticastListener: could not bind socket to address %v,%d: %v", bindAddr, port, err)
}
f := os.NewFile(uintptr(s), "")
c, err2 := net.FilePacketConn(f)
f.Close()
if err2 != nil {
syscall.Close(s)
return nil, fmt.Errorf("MulticastListener: could not get packet connection for socket(port=%d,ifname=%s): %v", port, ifname, err2)
}
u := c.(*net.UDPConn)
p := ipv4.NewPacketConn(c)
if err := p.SetControlMessage(ipv4.FlagTTL|ipv4.FlagSrc|ipv4.FlagDst|ipv4.FlagInterface, true); err != nil {
return nil, fmt.Errorf("MulticastListener: could not set control message flags: %v", err)
}
return &MulticastSock{P: p, U: u}, nil
*/
c, err := udpConn(&net.UDPAddr{IP: net.IPv4zero, Port: port}, ifname)
if err != nil {
return nil, err
}
u := c.(*net.UDPConn)
p := ipv4.NewPacketConn(c)
if err := p.SetControlMessage(ipv4.FlagTTL|ipv4.FlagSrc|ipv4.FlagDst|ipv4.FlagInterface, true); err != nil {
return nil, fmt.Errorf("MulticastListener: could not set control message flags: %v", err)
}
return &MulticastSock{P: p, U: u}, nil
}
开发者ID:udhos,项目名称:nexthop,代码行数:57,代码来源:multicast.go
示例13: setInterface
// setInterface is used to set the query interface, uses sytem
// default if not provided
func (c *client) setInterface(iface *net.Interface) error {
p := ipv4.NewPacketConn(c.ipv4UnicastConn)
if err := p.SetMulticastInterface(iface); err != nil {
return err
}
p2 := ipv6.NewPacketConn(c.ipv6UnicastConn)
if err := p2.SetMulticastInterface(iface); err != nil {
return err
}
p = ipv4.NewPacketConn(c.ipv4MulticastConn)
if err := p.SetMulticastInterface(iface); err != nil {
return err
}
p2 = ipv6.NewPacketConn(c.ipv6MulticastConn)
if err := p2.SetMulticastInterface(iface); err != nil {
return err
}
return nil
}
开发者ID:Gaboose,项目名称:mdns,代码行数:21,代码来源:client.go
示例14: TestPacketConnReadWriteUnicastUDP
func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
t.Skipf("not supported on %q", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
if ifi == nil {
t.Skipf("not available on %q", runtime.GOOS)
}
c, err := net.ListenPacket("udp4", "127.0.0.1:0")
if err != nil {
t.Fatal(err)
}
defer c.Close()
dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
if err != nil {
t.Fatal(err)
}
p := ipv4.NewPacketConn(c)
defer p.Close()
cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
wb := []byte("HELLO-R-U-THERE")
for i, toggle := range []bool{true, false, true} {
if err := p.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
t.Logf("not supported on %q", runtime.GOOS)
continue
}
t.Fatal(err)
}
p.SetTTL(i + 1)
if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
t.Fatal(err)
}
if n, err := p.WriteTo(wb, nil, dst); err != nil {
t.Fatal(err)
} else if n != len(wb) {
t.Fatalf("got %v; want %v", n, len(wb))
}
rb := make([]byte, 128)
if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
t.Fatal(err)
}
if n, cm, _, err := p.ReadFrom(rb); err != nil {
t.Fatal(err)
} else if !bytes.Equal(rb[:n], wb) {
t.Fatalf("got %v; want %v", rb[:n], wb)
} else {
t.Logf("rcvd cmsg: %v", cm)
}
}
}
开发者ID:imgemp,项目名称:WeTube,代码行数:55,代码来源:unicast_test.go
示例15: NewPacketConn
// NewPacketConn returns a PacketConn based on the specified net.PacketConn.
// It adds functionality to return the interface index from calls to ReadFrom
// and include the interface index argument in calls to WriteTo.
func NewPacketConn(pc net.PacketConn) (PacketConn, error) {
ipv4pc := ipv4.NewPacketConn(pc)
if err := ipv4pc.SetControlMessage(ipv4.FlagInterface, true); err != nil {
return nil, err
}
p := packetConn{
PacketConn: pc,
ipv4pc: ipv4pc,
}
return &p, nil
}
开发者ID:vmware,项目名称:godhcpv4,代码行数:16,代码来源:handler.go
示例16: main
func main() {
var nic string
flag.StringVar(&nic, "i", "", "")
flag.Parse()
iface, err := net.InterfaceByName(nic)
if err != nil {
panic(err)
}
addr, _ := iface.Addrs()
ip, _, _ := net.ParseCIDR(addr[0].String())
listenPort := fmt.Sprintf("%s:%d", ip, 10718)
packet, err := net.ListenPacket("udp4", listenPort)
if err != nil {
panic(err)
}
defer packet.Close()
p := ipv4.NewPacketConn(packet)
if err := p.SetControlMessage(ipv4.FlagInterface, true); err != nil {
panic(err)
}
buffer := make([]byte, 1500)
for {
_, cm, addr, err := p.ReadFrom(buffer)
if err != nil {
panic(err)
}
fmt.Printf("%v:\n", addr)
fmt.Printf("%s\n", buffer)
_, portStr, err := net.SplitHostPort(addr.String())
if err != nil {
panic(err)
}
port, _ := strconv.Atoi(portStr)
addr = &net.UDPAddr{IP: net.IPv4bcast, Port: port}
// nilをぶち込まないとエラーになる。。
// panic: write udp4: invalid argument
cm.Src = nil
if _, e := p.WriteTo(buffer, cm, addr); e != nil {
panic(e)
}
}
}
开发者ID:buty4649,项目名称:golang-udp-test,代码行数:51,代码来源:udp-recive.go
示例17: main
func main() {
flag.Parse()
ip := net.ParseIP(*group)
s, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, syscall.IPPROTO_UDP)
if err != nil {
log.Fatal(err)
}
syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEPORT, 1)
lsa := syscall.SockaddrInet4{Port: *port}
copy(lsa.Addr[:], ip.To4())
if err := syscall.Bind(s, &lsa); err != nil {
syscall.Close(s)
log.Fatal(err)
}
f := os.NewFile(uintptr(s), "")
c, err := net.FilePacketConn(f)
f.Close()
if err != nil {
log.Fatal(err)
}
p := ipv4.NewPacketConn(c)
defer p.Close()
ift, err := net.Interfaces()
if err != nil {
log.Fatal(err)
}
avail := net.FlagMulticast | net.FlagUp
for _, ifi := range ift {
if ifi.Flags&avail != avail {
continue
}
if err := p.JoinGroup(&ifi, &net.UDPAddr{IP: ip}); err != nil {
log.Println(err, "on", ifi)
}
}
log.Println(c.LocalAddr())
go receiver(c)
sig := make(chan os.Signal)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
for {
select {
case <-sig:
os.Exit(0)
}
}
}
开发者ID:udhos,项目名称:-stdyng,代码行数:51,代码来源:main.go
示例18: newServer
// Constructs server structure
func newServer(iface *net.Interface) (*Server, error) {
// Create wildcard connections (because :5353 can be already taken by other apps)
ipv4conn, err := net.ListenUDP("udp4", mdnsWildcardAddrIPv4)
if err != nil {
log.Printf("[ERR] bonjour: Failed to bind to udp4 port: %v", err)
}
ipv6conn, err := net.ListenUDP("udp6", mdnsWildcardAddrIPv6)
if err != nil {
log.Printf("[ERR] bonjour: Failed to bind to udp6 port: %v", err)
}
if ipv4conn == nil && ipv6conn == nil {
return nil, fmt.Errorf("[ERR] bonjour: Failed to bind to any udp port!")
}
// Join multicast groups to receive announcements
p1 := ipv4.NewPacketConn(ipv4conn)
p2 := ipv6.NewPacketConn(ipv6conn)
if iface != nil {
if err := p1.JoinGroup(iface, &net.UDPAddr{IP: mdnsGroupIPv4}); err != nil {
return nil, err
}
if err := p2.JoinGroup(iface, &net.UDPAddr{IP: mdnsGroupIPv6}); err != nil {
return nil, err
}
} else {
ifaces, err := net.Interfaces()
if err != nil {
return nil, err
}
errCount1, errCount2 := 0, 0
for _, iface := range ifaces {
if err := p1.JoinGroup(&iface, &net.UDPAddr{IP: mdnsGroupIPv4}); err != nil {
errCount1++
}
if err := p2.JoinGroup(&iface, &net.UDPAddr{IP: mdnsGroupIPv6}); err != nil {
errCount2++
}
}
if len(ifaces) == errCount1 && len(ifaces) == errCount2 {
return nil, fmt.Errorf("Failed to join multicast group on all interfaces!")
}
}
s := &Server{
ipv4conn: ipv4conn,
ipv6conn: ipv6conn,
ttl: 3200,
}
return s, nil
}
开发者ID:edc1591,项目名称:gohome,代码行数:52,代码来源:server.go
示例19: LocalMulticastPacketConn
func LocalMulticastPacketConn() (conn *ipv4.PacketConn, err error) {
/*
lo,err := LoopbackInterface()
if err != nil {
return
}
maddrs, err := lo.MulticastAddrs()
if err != nil {
return
}
var bestAddr net.Addr
for _,maddr := range maddrs {
Trace.Printf("looking at: `%s`", maddr.String())
parsedIP := net.ParseIP(maddr.String())
if parsedIP == nil {
Error.Printf("could not parsed IP: `%s`", maddr.String())
continue
} else if parsedIP.To4() == nil {
continue
}
bestAddr = maddr
break
}
if bestAddr == nil {
err = fmt.Errorf("could not find a good address to bind to")
return
}
localMulticastSpec := fmt.Sprintf("%s:%d", bestAddr, 5555)
*/
// TODO fundamentally change how multicast is sent. I can't get the API to work
// without creating a listener socket first but I shouldn't need it.
// Had issues with running multiple services (heka and sdk_service) so I'm
// going to the let the OS pick the port. `127.0.0.1:5556` used to work!
localMulticastSpec := "127.0.0.1:"
Trace.Printf("announce binding to port: `%s`", localMulticastSpec)
udpConn, err := net.ListenPacket("udp", localMulticastSpec)
if err != nil {
Error.Printf("could not listen to `%s`", localMulticastSpec)
return
}
Trace.Printf("udpConn.LocalAddr(): %s", udpConn.LocalAddr())
conn = ipv4.NewPacketConn(udpConn)
return
}
开发者ID:gudTECH,项目名称:scamp-go,代码行数:50,代码来源:util_multicast.go
示例20: makeConn
func makeConn(ifi net.Interface) (ret *net.UDPConn, err error) {
ret, err = net.ListenMulticastUDP("udp", &ifi, NetAddr)
if err != nil {
return
}
p := ipv4.NewPacketConn(ret)
if err := p.SetMulticastTTL(2); err != nil {
log.Println(err)
}
if err := p.SetMulticastLoopback(true); err != nil {
log.Println(err)
}
return
}
开发者ID:ronindev,项目名称:dms,代码行数:14,代码来源:ssdp.go
注:本文中的golang.org/x/net/ipv4.NewPacketConn函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论