Browse files

Only listen on each interface once

  • Loading branch information...
1 parent a311f70 commit 75e3227e0fc24c94bb4eb74e161cd0fd32d47f75 @abh committed Sep 4, 2012
Showing with 54 additions and 27 deletions.
  1. +3 −27 geodns.go
  2. +51 −0 util.go
View
30 geodns.go
@@ -86,33 +86,9 @@ func main() {
setupPgeodnsZone(Zones)
go configReader(dirName, Zones)
- for _, host := range strings.Split(*flaginter, ",") {
- ip, port, err := net.SplitHostPort(host)
- if err != nil {
- switch {
- case strings.Contains(err.Error(), "missing port in address"):
- // 127.0.0.1
- ip = host
- case strings.Contains(err.Error(), "too many colons in address") &&
- // [a:b::c]
- strings.LastIndex(host, "]") == len(host)-1:
- ip = host[1 : len(host)-1]
- port = ""
- case strings.Contains(err.Error(), "too many colons in address"):
- // a:b::c
- ip = host
- port = ""
- default:
- log.Fatalf("Could not parse %s: %s\n", host, err)
- }
- }
- if len(port) == 0 {
- port = *flagport
- }
- host = net.JoinHostPort(ip, port)
- if len(serverId) == 0 {
- serverId = ip
- }
+
+ inter := getInterfaces()
+ for _, host := range inter {
go listenAndServe(host, &Zones)
}
View
51 util.go
@@ -0,0 +1,51 @@
+package main
+
+import (
+ "log"
+ "net"
+ "strings"
+)
+
+func getInterfaces() []string {
+
+ var inter []string
+ uniq := make(map[string]bool)
+
+ for _, host := range strings.Split(*flaginter, ",") {
+ ip, port, err := net.SplitHostPort(host)
+ if err != nil {
+ switch {
+ case strings.Contains(err.Error(), "missing port in address"):
+ // 127.0.0.1
+ ip = host
+ case strings.Contains(err.Error(), "too many colons in address") &&
+ // [a:b::c]
+ strings.LastIndex(host, "]") == len(host)-1:
+ ip = host[1 : len(host)-1]
+ port = ""
+ case strings.Contains(err.Error(), "too many colons in address"):
+ // a:b::c
+ ip = host
+ port = ""
+ default:
+ log.Fatalf("Could not parse %s: %s\n", host, err)
+ }
+ }
+ if len(port) == 0 {
+ port = *flagport
+ }
+ host = net.JoinHostPort(ip, port)
+ if uniq[host] {
+ continue
+ }
+ uniq[host] = true
+
+ if len(serverId) == 0 {
+ serverId = ip
+ }
+ inter = append(inter, host)
+
+ }
+
+ return inter
+}

0 comments on commit 75e3227

Please sign in to comment.