Better (in theory) udp support
This commit is contained in:
@@ -17,6 +17,14 @@ type link struct {
|
|||||||
linkType string
|
linkType string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l link) isTCP() bool {
|
||||||
|
return strings.HasPrefix(l.linkType, "tcp") || strings.HasPrefix(l.linkType, "unix")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l link) isUDP() bool {
|
||||||
|
return strings.HasPrefix(l.linkType, "udp")
|
||||||
|
}
|
||||||
|
|
||||||
func linker() {
|
func linker() {
|
||||||
links, err := parseConf()
|
links, err := parseConf()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -63,15 +71,34 @@ failWaiting:
|
|||||||
|
|
||||||
func createLink(port int, l link, failChan chan int) {
|
func createLink(port int, l link, failChan chan int) {
|
||||||
log.Println("Linking", port, "to", l.addr, "with type", l.linkType)
|
log.Println("Linking", port, "to", l.addr, "with type", l.linkType)
|
||||||
listen, err := net.Listen(l.linkType, ":"+strconv.Itoa(port))
|
var tcpListen net.Listener
|
||||||
if err != nil {
|
var con net.Conn
|
||||||
log.Println("Error while trying to listen to port ", port, ":", err)
|
var err error
|
||||||
failChan <- port
|
if l.isTCP() {
|
||||||
return
|
tcpListen, err = net.Listen(l.linkType, ":"+strconv.Itoa(port))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error while trying to listen to port", port, ":", err)
|
||||||
|
failChan <- port
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer tcpListen.Close()
|
||||||
|
} else if l.isUDP() {
|
||||||
|
var addr *net.UDPAddr
|
||||||
|
addr, err = net.ResolveUDPAddr(l.linkType, ":"+strconv.Itoa(port))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error while parsing port", port, ":", err)
|
||||||
|
failChan <- port
|
||||||
|
return
|
||||||
|
}
|
||||||
|
con, err = net.ListenUDP(l.linkType, addr)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error while listening to port", port, ":", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
defer listen.Close()
|
|
||||||
for {
|
for {
|
||||||
con, err := listen.Accept()
|
if l.isTCP() {
|
||||||
|
con, err = tcpListen.Accept()
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Error while trying to accept connection to port ", port, ":", err)
|
log.Println("Error while trying to accept connection to port ", port, ":", err)
|
||||||
failChan <- port
|
failChan <- port
|
||||||
@@ -83,6 +110,19 @@ func createLink(port int, l link, failChan chan int) {
|
|||||||
failChan <- port
|
failChan <- port
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if l.isUDP() {
|
||||||
|
var addr *net.UDPAddr
|
||||||
|
addr, err = net.ResolveUDPAddr(l.linkType, ":"+strconv.Itoa(port))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error while parsing port", port, ":", err)
|
||||||
|
failChan <- port
|
||||||
|
return
|
||||||
|
}
|
||||||
|
con, err = net.ListenUDP(l.linkType, addr)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error while listening to port", port, ":", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,7 +205,7 @@ func parseConf() (links map[int]link, err error) {
|
|||||||
func copyConn(src net.Conn, l link) error {
|
func copyConn(src net.Conn, l link) error {
|
||||||
dst, err := net.Dial(l.linkType, l.addr)
|
dst, err := net.Dial(l.linkType, l.addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Erro while dialing", l.addr)
|
log.Println("Error while dialing", l.addr)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user