Break listen down in to two parts -- start listening, and wait.
diff --git a/.gitignore b/.gitignore
index 48b8bf9..bb125c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
vendor/
+.idea/
+*.iml
+*~
diff --git a/glide.lock b/glide.lock
index 910b296..f8b3ba0 100644
--- a/glide.lock
+++ b/glide.lock
@@ -1,8 +1,41 @@
hash: 9b96c783f272b0a712add71d2d753d1eb07ba91dfe9b42e3532b8d3e3cec639c
-updated: 2016-10-04T12:46:18.025613379-07:00
+updated: 2016-12-16T16:08:14.415655665-08:00
imports: []
testImports:
- name: github.com/onsi/ginkgo
version: 45a5f6ffb2a14e4f29698c16ae4c0a34018a8951
+ subpackages:
+ - config
+ - internal/codelocation
+ - internal/containernode
+ - internal/failer
+ - internal/leafnodes
+ - internal/remote
+ - internal/spec
+ - internal/specrunner
+ - internal/suite
+ - internal/testingtproxy
+ - internal/writer
+ - reporters
+ - reporters/stenographer
+ - types
- name: github.com/onsi/gomega
version: d59fa0ac68bb5dd932ee8d24eed631cdd519efc3
+ subpackages:
+ - format
+ - internal/assertion
+ - internal/asyncassertion
+ - internal/oraclematcher
+ - internal/testingtsupport
+ - matchers
+ - matchers/support/goraph/bipartitegraph
+ - matchers/support/goraph/edge
+ - matchers/support/goraph/node
+ - matchers/support/goraph/util
+ - types
+- name: golang.org/x/sys
+ version: c200b10b5d5e122be351b67af224adc6128af5bf
+ subpackages:
+ - unix
+- name: gopkg.in/yaml.v2
+ version: a5b47d31c556af34a302ce5d659e6fea44d90de0
diff --git a/scaffold.go b/scaffold.go
index a878a7b..9d90a0d 100644
--- a/scaffold.go
+++ b/scaffold.go
@@ -317,23 +317,11 @@
}
/*
-Listen should be called instead of using the standard "http" and "net"
+StartListen should be called instead of using the standard "http" and "net"
libraries. It will open a port (or ports) and begin listening for
-HTTP traffic. It will block until the server is shut down by
-the various methods in this class.
-It will use the graceful shutdown logic to ensure that once marked down,
-the server will not exit until all the requests have completed,
-or until the shutdown timeout has expired.
-Like http.Serve, this function will block until we are done serving HTTP.
-If "SetInsecurePort" or "SetSecurePort" were not set, then it will listen on
-a dynamic port.
-Listen will block until the server is shutdown using "Shutdown" or one of
-the other shutdown mechanisms. It must not be called until after "Open"
-has been called.
-If shut down, Listen will return the error that was passed to the "shutdown"
-method.
+HTTP traffic.
*/
-func (s *HTTPScaffold) Listen(baseHandler http.Handler) error {
+func (s *HTTPScaffold) StartListen(baseHandler http.Handler) error {
if !s.open {
err := s.Open()
if err != nil {
@@ -366,7 +354,24 @@
if s.secureListener != nil {
go http.Serve(s.secureListener, mainHandler)
}
+ return nil
+}
+/*
+WaitForShutdown blocks until we are shut down.
+It will use the graceful shutdown logic to ensure that once marked down,
+the server will not exit until all the requests have completed,
+or until the shutdown timeout has expired.
+Like http.Serve, this function will block until we are done serving HTTP.
+If "SetInsecurePort" or "SetSecurePort" were not set, then it will listen on
+a dynamic port.
+This method will block until the server is shutdown using "Shutdown" or one of
+the other shutdown mechanisms. It must not be called until after
+"StartListenen"
+When shut down, this method will return the error that was passed to the "shutdown"
+method.
+*/
+func (s *HTTPScaffold) WaitForShutdown() error {
err := <-s.tracker.C
if s.insecureListener != nil {
@@ -383,6 +388,19 @@
}
/*
+Listen is a convenience function that first calls "StartListen" and then
+calls "WaitForShutdown."
+*/
+func (s *HTTPScaffold) Listen(baseHandler http.Handler) error {
+ err := s.StartListen(baseHandler)
+ if err != nil {
+ return err
+ }
+
+ return s.WaitForShutdown()
+}
+
+/*
Shutdown indicates that the server should stop handling incoming requests
and exit from the "Serve" call. This may be called automatically by
calling "CatchSignals," or automatically using this call. If