Skip to content

Commit

Permalink
stop accepting connections after server shutdown
Browse files Browse the repository at this point in the history
  • Loading branch information
shwet authored and travisjeffery committed Mar 9, 2017
1 parent 0ceb188 commit 7d43f27
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 16 deletions.
2 changes: 1 addition & 1 deletion server/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
)

// Proxy acts as a proxy for an existing Jocko server
// It forwards requests to server over tcp connection and returns server response to caller
// It forwards requests to server over provided connection and returns server response to caller
type Proxy struct {
conn io.ReadWriter
}
Expand Down
38 changes: 23 additions & 15 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,20 @@ import (
)

type Server struct {
addr string
ln *net.TCPListener
mu sync.Mutex
logger *simplelog.Logger
broker jocko.Broker
addr string
ln *net.TCPListener
mu sync.Mutex
logger *simplelog.Logger
broker jocko.Broker
shutdownCh chan struct{}
}

func New(addr string, broker jocko.Broker, logger *simplelog.Logger) *Server {
return &Server{
addr: addr,
broker: broker,
logger: logger,
addr: addr,
broker: broker,
logger: logger,
shutdownCh: make(chan struct{}),
}
}

Expand Down Expand Up @@ -60,13 +62,18 @@ func (s *Server) Start() error {

go func() {
for {
conn, err := s.ln.Accept()
if err != nil {
s.logger.Debug("listener accept failed: %v", err)
continue
}
select {
case <-s.shutdownCh:
break
default:
conn, err := s.ln.Accept()
if err != nil {
s.logger.Debug("listener accept failed: %v", err)
continue
}

go s.handleRequest(conn)
go s.handleRequest(conn)
}
}
}()

Expand All @@ -82,6 +89,7 @@ func (s *Server) Start() error {

// Close closes the service.
func (s *Server) Close() {
close(s.shutdownCh)
s.ln.Close()
return
}
Expand All @@ -95,7 +103,7 @@ func (s *Server) handleRequest(conn net.Conn) {
for {
err := conn.SetReadDeadline(time.Now().Add(5 * time.Second))
if err != nil {
s.logger.Info("Read deadilne failed: %s", err)
s.logger.Info("Read deadline failed: %s", err)
continue
}
n, err := io.ReadFull(conn, p[:])
Expand Down

0 comments on commit 7d43f27

Please sign in to comment.