High Availability daemon to share an IP around N servers.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zoreide/multicast.go

67 lines
1.4 KiB

package main
import (
"log"
"net"
)
type AbstractMulticast struct {
MIpAddr string
MPort string
MaxDatagramSize int
MWaddr *net.UDPAddr
MRaddr *net.UDPAddr
Wconn *net.UDPConn
Rconn *net.UDPConn
}
func (mip *AbstractMulticast) CreateUdpAddr() {
// This Will create the local UDP Address
addr, err := net.ResolveUDPAddr("udp4", mip.MIpAddr+":"+mip.MPort)
if err != nil {
log.Fatal(err.Error())
}
mip.MRaddr = addr
log.Println("Multicast Listen addr created: ", mip.MRaddr.String())
// This will create the Writing UDP Addr
mip.MWaddr = addr
log.Println("Multicast Writing addr created: ", mip.MWaddr.String())
}
func (mip *AbstractMulticast) CreateWritingSocket() {
conn, err := net.DialUDP("udp4", nil, mip.MWaddr)
if err != nil {
log.Fatal(err.Error())
}
mip.Wconn = conn
log.Println("Multicast Writing Socket Created: ", mip.Wconn.LocalAddr().String(), "->", mip.Wconn.RemoteAddr().String())
}
func (mip *AbstractMulticast) CreateReadingSocket() {
// Open up a connection
conn, err := net.ListenMulticastUDP("udp", nil, mip.MRaddr)
if err != nil {
log.Fatal("UDP " + err.Error())
}
conn.SetReadBuffer(mip.MaxDatagramSize)
mip.Rconn = conn
log.Println("Multicast Reading Socket Created: ", mip.Rconn.LocalAddr().String())
}
func (mip *AbstractMulticast) GetMulticastReady() {
mip.CreateUdpAddr()
mip.CreateWritingSocket()
mip.CreateReadingSocket()
}