Better (in theory) udp support

This commit is contained in:
Caleb Gardner
2021-09-23 15:08:31 -05:00
parent e2171e2c03
commit 4596c0315a
+45 -5
View File
@@ -17,6 +17,14 @@ type link struct {
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() {
links, err := parseConf()
if err != nil {
@@ -63,15 +71,34 @@ failWaiting:
func createLink(port int, l link, failChan chan int) {
log.Println("Linking", port, "to", l.addr, "with type", l.linkType)
listen, err := net.Listen(l.linkType, ":"+strconv.Itoa(port))
var tcpListen net.Listener
var con net.Conn
var err error
if l.isTCP() {
tcpListen, err = net.Listen(l.linkType, ":"+strconv.Itoa(port))
if err != nil {
log.Println("Error while trying to listen to port ", port, ":", err)
log.Println("Error while trying to listen to port", port, ":", err)
failChan <- port
return
}
defer listen.Close()
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)
}
}
for {
con, err := listen.Accept()
if l.isTCP() {
con, err = tcpListen.Accept()
}
if err != nil {
log.Println("Error while trying to accept connection to port ", port, ":", err)
failChan <- port
@@ -83,6 +110,19 @@ func createLink(port int, l link, failChan chan int) {
failChan <- port
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 {
dst, err := net.Dial(l.linkType, l.addr)
if err != nil {
log.Println("Erro while dialing", l.addr)
log.Println("Error while dialing", l.addr)
return err
}