From c3be2d0d46217e11fa9dc51a692694c81fb97692 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Thu, 23 Mar 2017 12:07:23 +1000 Subject: [PATCH] socket: Fixup sending code so we can support more connections --- irc/socket.go | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/irc/socket.go b/irc/socket.go index 37c7cd0f..e4e4806d 100644 --- a/irc/socket.go +++ b/irc/socket.go @@ -50,7 +50,12 @@ func NewSocket(conn net.Conn, maxSendQBytes uint64) Socket { // Close stops a Socket from being able to send/receive any more data. func (socket *Socket) Close() { socket.Closed = true - // socket will close once all data has been sent + + // 'send data' to force close loop to happen + socket.linesToSendMutex.Lock() + socket.linesToSend = append(socket.linesToSend, "") + socket.linesToSendMutex.Unlock() + go socket.fillLineToSendExists() } // CertFP returns the fingerprint of the certificate provided by the client. @@ -155,12 +160,21 @@ func (socket *Socket) RunSocketWriter() { } // write data - _, err := socket.conn.Write([]byte(data)) - if err != nil { - errOut = true - fmt.Println(err.Error()) + if 0 < len(data) { + _, err := socket.conn.Write([]byte(data)) + if err != nil { + errOut = true + fmt.Println(err.Error()) + break + } + } + + // check if we're closed + if socket.Closed { + socket.linesToSendMutex.Unlock() break } + socket.linesToSendMutex.Unlock() } if errOut {