I'm working on a simple IRC library and a bot as its reference implementation, and I'm having an issue with it not being able to detect when the server has closed the connection. I'm using Go's net.Dial function to establish a connection and bufio.Scanner to get response lines. I was using bufio.Reader, but even with ReadLine() it was still dropping lines and parts of lines.
Everything works well so far, but if you aren't familiar with the IRC (chat) protocol, to make sure that the client is still connected, every so often at a set amount of time, the server will send a PING command, and wait for the client to reply with a PONG command. If it doesn't respond, the server assumes that the client has exited without sending the QUIT command or has lost the connection and closes its connection.
I'm using
scanner := bufio.NewScanner(server.Connection) //server.Connection is net.Conn
for scanner.Scan() {
msg = scanner.Text()
Because I figured that if the connection is closed, the scanner will be "empty", yet when the server closes the connection, it's still stuck in the for loop. I've checked, and scanner.Err() is nil and server.Connection is not. Any suggestions?