}
func NewServer(c *ServerConfig) (s *Server, err error) {
+ if c == nil {
+ c = &ServerConfig{}
+ }
s = &Server{}
s.socket, err = makeSocket(c.Addr)
if err != nil {
return
}
go func() {
- panic(s.serve())
+ err := s.serve()
+ select {
+ case <-s.closed:
+ return
+ default:
+ }
+ if err != nil {
+ panic(err)
+ }
}()
go func() {
err := s.bootstrap()
return
}
-func (s *Server) StopServing() {
- s.socket.Close()
+func (s *Server) Close() {
s.mu.Lock()
select {
case <-s.closed:
default:
close(s.closed)
+ s.socket.Close()
}
s.mu.Unlock()
}