diff --git a/irc.go b/irc.go index 652f327..06917d5 100644 --- a/irc.go +++ b/irc.go @@ -67,7 +67,7 @@ func (irc *Connection) readLoop() { if err != nil { errChan <- err - break + return } if irc.Debug { @@ -129,8 +129,7 @@ func (irc *Connection) writeLoop() { select { case <-irc.end: return - default: - b, ok := <-irc.pwrite + case b, ok := <-irc.pwrite: if !ok || b == "" || irc.socket == nil { return } @@ -189,17 +188,15 @@ func (irc *Connection) pingLoop() { // Main loop to control the connection. func (irc *Connection) Loop() { errChan := irc.ErrorChan() - for !irc.stopped { + for !irc.quit { err := <-errChan - if irc.stopped { - break - } irc.Log.Printf("Error, disconnected: %s\n", err) - for !irc.stopped { + for !irc.quit { if err = irc.Reconnect(); err != nil { irc.Log.Printf("Error while reconnecting: %s\n", err) - time.Sleep(1 * time.Second) + time.Sleep(60 * time.Second) } else { + errChan = irc.ErrorChan() break } } @@ -217,6 +214,7 @@ func (irc *Connection) Quit() { irc.SendRaw(quit) irc.stopped = true + irc.quit = true } // Use the connection to join a given channel. diff --git a/irc_struct.go b/irc_struct.go index fbba0ce..fb301a1 100644 --- a/irc_struct.go +++ b/irc_struct.go @@ -42,6 +42,7 @@ type Connection struct { Log *log.Logger stopped bool + quit bool } // A struct to represent an event.