added listener close()
This commit is contained in:
@@ -29,6 +29,8 @@ type Service struct {
|
||||
keepalive bool
|
||||
kaTime time.Duration
|
||||
kaMtx sync.Mutex
|
||||
listener net.Listener
|
||||
tcpListener *net.TCPListener
|
||||
}
|
||||
|
||||
func NewService() *Service {
|
||||
@@ -78,14 +80,14 @@ func (svc *Service) Listen(address string) error {
|
||||
err = fmt.Errorf("unable to resolve adddress: %s", err)
|
||||
return err
|
||||
}
|
||||
listener, err := net.ListenTCP("tcp", addr)
|
||||
svc.tcpListener, err = net.ListenTCP("tcp", addr)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to start listener: %s", err)
|
||||
return err
|
||||
}
|
||||
|
||||
for {
|
||||
conn, err := listener.AcceptTCP()
|
||||
conn, err := svc.tcpListener.AcceptTCP()
|
||||
if err != nil {
|
||||
logError("conn accept err:", err)
|
||||
}
|
||||
@@ -104,19 +106,20 @@ func (svc *Service) ListenTLS(address string, tlsConfig *tls.Config) error {
|
||||
var err error
|
||||
logInfo("server listen:", address)
|
||||
|
||||
listener, err := tls.Listen("tcp", address, tlsConfig)
|
||||
svc.listener, err = tls.Listen("tcp", address, tlsConfig)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to start listener: %s", err)
|
||||
return err
|
||||
}
|
||||
|
||||
for {
|
||||
conn, err := listener.Accept()
|
||||
conn, err := svc.listener.Accept()
|
||||
if err != nil {
|
||||
logError("conn accept err:", err)
|
||||
}
|
||||
select {
|
||||
case <-svc.ctx.Done():
|
||||
logMessage("accept loop done")
|
||||
return err
|
||||
default:
|
||||
}
|
||||
@@ -136,6 +139,12 @@ func (svc *Service) Stop() error {
|
||||
var err error
|
||||
// Disable new connection
|
||||
logInfo("cancel rpc accept loop")
|
||||
if svc.listener != nil {
|
||||
svc.listener.Close()
|
||||
}
|
||||
if svc.tcpListener != nil {
|
||||
svc.tcpListener.Close()
|
||||
}
|
||||
svc.cancel()
|
||||
// Wait handlers
|
||||
logInfo("wait rpc handlers")
|
||||
|
||||
Reference in New Issue
Block a user