diff --git a/irc/client.go b/irc/client.go index d1333ef4..17bf557f 100644 --- a/irc/client.go +++ b/irc/client.go @@ -264,11 +264,8 @@ func (client *Client) ChangeNickname(nickname Name) { } } -func (client *Client) Reply(reply string, args ...interface{}) { - if len(args) > 0 { - reply = fmt.Sprintf(reply, args...) - } - client.socket.Write(reply) +func (client *Client) Reply(reply string) error { + return client.socket.Write(reply) } func (client *Client) Quit(message Text) { diff --git a/irc/socket.go b/irc/socket.go index d049347d..d193fd8a 100644 --- a/irc/socket.go +++ b/irc/socket.go @@ -12,6 +12,7 @@ const ( ) type Socket struct { + closed bool conn net.Conn scanner *bufio.Scanner writer *bufio.Writer @@ -30,11 +31,20 @@ func (socket *Socket) String() string { } func (socket *Socket) Close() { + if socket.closed { + return + } + socket.closed = true socket.conn.Close() Log.debug.Printf("%s closed", socket) } func (socket *Socket) Read() (line string, err error) { + if socket.closed { + err = io.EOF + return + } + for socket.scanner.Scan() { line = socket.scanner.Text() if len(line) == 0 { @@ -53,6 +63,11 @@ func (socket *Socket) Read() (line string, err error) { } func (socket *Socket) Write(line string) (err error) { + if socket.closed { + err = io.EOF + return + } + if _, err = socket.writer.WriteString(line); socket.isError(err, W) { return }