added listener close()

This commit is contained in:
2023-05-18 12:53:37 +02:00
parent f814bb7d24
commit cb6d26a7cc
+13 -4
View File
@@ -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")