diff --git a/eventloop_unix.go b/eventloop_unix.go index a7c4f9c52..d1fb84222 100644 --- a/eventloop_unix.go +++ b/eventloop_unix.go @@ -136,9 +136,7 @@ func (lp *eventloop) loopIn(c *conn) error { func (lp *eventloop) loopCloseConn(c *conn, err error) error { if atomic.CompareAndSwapInt32(&c.opened, connStateCloseReady, connStateCloseLazyout) { c.loop.eventHandler.OnClosed(c, err) - if c.tlsconn != nil { - c.tlsconn.CloseWrite() - } + c.loop.connections[c.fd/lp.svr.subLoopGroup.len()] = nil lp.lazyChan <- c //进行最后的输出 } diff --git a/server_unix.go b/server_unix.go index 3022d1fb4..1d8a6f81e 100644 --- a/server_unix.go +++ b/server_unix.go @@ -616,6 +616,9 @@ func (o *out) write() { } func (c *conn) lazywrite() { if c.opened != connStateCloseOk { + if c.opened == connStateCloseLazyout && c.tlsconn != nil { //关闭前通知tls关闭 + c.tlsconn.CloseWrite() + } for c.outboundBuffer.Len() > 0 { n, err := unix.Write(c.fd, c.outboundBuffer.Bytes()) if n <= 0 || err != nil { @@ -632,6 +635,7 @@ func (c *conn) lazywrite() { if c.opened == connStateCloseLazyout { //彻底删除close的c c.opened = connStateCloseOk + unix.Close(c.fd) c.loop.poller.Delete(c.fd) c.releaseTCP()