Quit Messages Explained

What are IRC quit messages
Quit messages are used on IRC to describe why the user is disconnecting from IRC (or quitting as it's called), via a custom quit message, or the reason why the server closed the connection. Custom quit messages can be created by the user to show or tell other users why they are leaving. They cannot exceed 160 characters, and they are limited to a single line. Server quit messages can be used to describe the reason that caused a disconnection from the server.

Where are they displayed
The display of a quit message is pretty straightforward. When the user disconnects, a message is displayed in the channel window. A quit message is not shown in a query/chat window when the user quits, so if you don't receive an answer in a private chat, check your status window for a "no such nick" message, or do a /whois to check. In the channel, the usual quit message is "Nick has quit IRC (message)". In the message area, a description is placed. This can either be a custom quit message, or an error quit message as described above.

NOTE: custom quit meassages are always preceded by "Quit:"

How to gather information from quit messages
Besides gathering information about why a user has disconnected (i.e., a custom quit message), error quit messages can also provide information about a technical reason for a disconnection. For example, error quit messages can be "Read Error," "Write Error," "Ping timeout," etc. These each describe what occurred. The sections below will explain these server quit messages in more detail.

Customizing quit messages
Many users customize their quit message to describe why they left. To do this, simply enter "/quit (reason)". When this command is entered, the following will be displayed "*** Blah has quit IRC (Quit: reason)." For example, if your nick is John, and you typed "/quit Leaving," it would display "*** John has quit IRC (Quit: Leaving)." Custom quit messages cannot exceed 160 characters in length and must be written on only one line. Many IRC clients (programs) allow you to automate the custom quit message process, check your client's documentation.

Read error definition
A read error occurs when a server cannot successfully read from a user's client (IRC program). Servers gather information from the client by text, setup, and other items. When the server receives an error when reading from a client, it then disconnects the user, resulting in a read error quit message. For example *** John has quit IRC (Read error). This error was caused because the server expected more information from a file, and the file responded with an EOF (end of file) or a read error.

Write error definition
A write error occurs when a server cannot successfully write to a user's client. When the server receives information, it usually responds with information of its own. For example: you perform a /whois which in effect is a request from the server to send back information to your client, which results in you receiving the whois information you requested. If the server receives an error when trying to write to a client, it then disconnects the user, resulting in a write error quit message similar to the read error format. For example *** John has quit IRC (Write error). This error was caused because the server closed the link (connection) after a failed attempt to send data (i.e. write) to the client.

Connection reset by peer
Many times when a user is disconnected because of an error, a "connection reset by peer" quit message is seen. This means that, when the user quits, the connection was then reset by the server. This immediately disconnects any ghost that may be present and allows the user to connect to the server once again. A ghost is left over data about a client, such as their nick and whois information, that normally is purged by the server once the client disconnects. This "phantom" information results in the appearance of a client being present (a ghost) even though the client is no longer connected to the network * "Peer" can be any network hardware that is handling traffic between you and the server (modems, routers, switches, bridges, firewalls, proxies, etc). Reasons for this error to happen can be many dropped packets of data, power interruption, high system load, routing changes, delayed connections, ISP problems, Internet routing delays, etc.

Definition of ping
A ping is a tool that users and servers use to measure the amount of time between the sending of the command and the receiving back. When a user pings another user, it sends the ping command to the server. The server then routes it to the server that the user is connected to, which then sends it to the user's client. The client responds (with a pong), which is sent back to the initial pinger's client. The amount of time it takes for a ping to be sent, and a pong to be received, is referred to as the ping time. This same action is performed when a line of text is sent. A Long ping time is often called lag, because the person appears to be slow to respond or lagging behind the rest of the channel chat.

When they occur
Servers automatically ping users at a preset time. The reason for this is to ensure that the client is still connected to the server. When you see "PING? PONG!" (most clients hide this by default, as it can get annoying) in your status window, it means the server has pinged your client, and your client has responded back with a pong to tell the server that you are still connected. When the server does not receive a reply (or pong), it assumes that the client disconnected without the server's knowledge. The server will then automatically disconnect the user resulting in a ping timeout. For example, if the server pinged our friend John, and John's client didn't respond, it would result in *** John has quit IRC (Ping timeout).

Avoiding Ping timeouts
There is no real way to avoid a ping timeout. They often result because of overloading of a client, overloading of a server, unreliable ISP connection, Internet routing problems, etc. Sometimes they occur when the client has not performed any operation (sent data) for a considerable amount of time (for example, staying on IRC while not doing anything). Ping timeouts occur to everyone and often are beyond the person's control.

Less common quit messages
There are other quit messages which can show, for example, a netsplit. Services can also use quit messages to show users why they disconnected. They are often coded into the Service by the programmer so he/she knows why it disconnected. For example, ChanServ, our channel service bot, sometimes disconnect with *** ChanServ has quit IRC (offline for maintenance). This is done to let others on the network know that ChanServ was disconnected on purpose, and not because of a bug or network problem. This doesn't happen very often.

Nick Collision
You may also experience "nick collision" quits when the net rejoins after a netsplit. This happens when two clients or users with the same nick, who were on different sides of the network during a netsplit, come together (collide) when the servers reconnect to each other. Since both users cannot continue with the same nickname, the oldest user (the one who had that nick the longest) keeps the nick, and the newer user is killed and must reconnect with a different nickname. When this happens, you will see a quit message such as *** evi|one has quit IRC (Killed (*.darenet.org (older nick overruled)))

The same nick collision kill occurs even if the same user is on both sides of the netsplit with the same hostmask, when it junctions. You may see *** Speed^ has quit IRC (Killed (*.darenet.org (Nick Collision from same user@host)))

Server lag can cause nick collisions too if one server doesn't "see" that two users have joined the network with the same nick. If one or more of the servers take too long to relay that a" user has joined" message to the network, it's possible for two users to have the same nick for a very short while. Once the servers "catch up", and "see" both recent joins, a nick collision occurs with the same results as above.

Recognizing a netsplit
Quit messages can also show when a netsplit occurs. For example, *** John has quit IRC (*.net *.split).

Broken Pipe
This is not an IRC-exclusive error but it can be seen in some situations, for instance, when downloading data. The quit message means there was a sudden break in the connection with the server. This can occur for many reasons, beyond the user's control. Heavy Internet traffic, overloaded ISPs, Network routing problems etc. Users with slow Internet connections can sometimes overload their own connections when downloading files while on IRC.

Max SendQ Exceeded
Sendq (Send queue) is the amount of data that is allowed to be pending (or stored) by the server. Each server has a set limit of data allowed to be queued for each user or client. This is done to assure that the server's resources are distributed equally amongst all users. This quit message is fairly rare, and is often caused by network or internet problems that prevent data from reaching a user. People with slow Internet connections may get disconnected this way when requesting a large amount of data from the server. If the amount of data stored in the sendq (or buffer) exceeds the per user limit set by the server, the server will disconnect the client with a quit message that will look like *** cArLiLLoS has quit IRC (Max SendQ exceeded). One way this might happen is when requesting the user list on a very large channel via /who #channel. If your connection can not receive the data from the server fast enough, the server's sendq may fill up causing you to be disconnected with a max sendq exceeded quit message.

Excess Flood
This quit message happens when a client sends too much data to the server too quickly. When a large amount data is sent to the server (or a user) too quickly it is called a flood (as in flood of data). This can cause the server to become unstable so it protects itself by closing the connection of the client that's flooding it. This can happen by copy/pasting a large block of text into a channel or message window, so bare this in mind when performing this operation and break up the text into smaller segments (a few lines) at a time. The quit message caused by flooding the server will look like *** somenick has quit IRC (Excess Flood)

Oper-resulted quit messages
When an IRCop (Oper) disconnects a user (by the Oper command /kill), the message the channel sees takes the form of *** nickname has quit IRC (Killed (*.darenet.org (reason)). The user who received the kill would see a slightly different message. For example, if the user "someNick" was killed on pointserv.uk.eu.darenet.org, they may see ***Closing Link: someNick by pointserv.uk.eu.darenet.org (Killed (*.darenet.org) (reason))

The use of the term kill refers to the IRCop killing the user's connection to the DareNET server (The term has been around long before there ever was this thing called IRC), IRCops on DareNET are peaceful fun loving people and don't really kill people.