diff --git a/server/server.go b/server/server.go index 6bbbf5e9..b447a1c9 100644 --- a/server/server.go +++ b/server/server.go @@ -274,6 +274,19 @@ func (s *Server) AcceptLoop() { s.listener = l s.mu.Unlock() + // Write resolved port back to options. + _, port, err := net.SplitHostPort(l.Addr().String()) + if err != nil { + Fatalf("Error parsing server address (%s): %s", l.Addr().String(), e) + return + } + portNum, err := strconv.Atoi(port) + if err != nil { + Fatalf("Error parsing server address (%s): %s", l.Addr().String(), e) + return + } + s.opts.Port = portNum + tmpDelay := ACCEPT_MIN_SLEEP for s.isRunning() { diff --git a/test/port_test.go b/test/port_test.go index 291b8ad1..b478f4ee 100644 --- a/test/port_test.go +++ b/test/port_test.go @@ -33,4 +33,9 @@ func TestResolveRandomPort(t *testing.T) { if portNum == server.RANDOM_PORT { t.Fatalf("Expected server to choose a random port\nGot: %d", server.RANDOM_PORT) } + + if opts.Port != portNum { + t.Fatalf("Options port (%d) should have been overridden by chosen random port (%d)", + opts.Port, portNum) + } }