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