[IRC-DEV] WATCH list & mIRC: Problema de flood

Ruben Cardenal rubenc at arrakis.es
Thu May 30 17:55:06 CEST 2002


Hola,

  Existe una problema con los nodos que ya tienen el WATCH y el mIRC. 
Cuando se conecta al servidor, el mIRC envía la lista de nicks del 
notify, y luego el servidor le responde con la lista de usuarios 
conectados. Hasta aqui, todo bien. Pero existe un problema. Si la lista 
que se le envía al servidor es demasiado grande (cuando se puso esta 
feature en la red, mi notify era de 129 personas), te caes por excess 
flood. Mirando, en ese caso, el debug de la conexión, se observa que la 
caida ocurre exactamente despues de mandar la lista de nicks del notify 
al servidor.

  Puesto que existe un límite en la cantidad de información que se puede 
enviar al servidor, y es un parámetro que se define en el config.h, el 
CLIENT_FLOOD, parámetro que en Hispano está fijado a 1024bytes. Puesto 
que la lista del WATCH que envía el mIRC, si tenemos en cuenta que:

    * Los nicks los separa con un espacio
    * A cada nick le antepone un +
    * Envia un C antes de la lista y un S al final

  Y si asumimos, en el peor de los casos, 9 caracteres por nick, cada 
nick se comería 11 bytes, y por 128 nicks que caben en la lista, tenemos 
1408 bytes, a lo que hay que sumarle los retornos de carro, y lo que 
ocupa la palabra WATCH por dos veces, pues el mIRC en el caso de una 
lista tan grande, envia dos WATCH. Redondeando, que aproximadamente 
envía unos 1426 bytes, lo que produce la desconexion por excess flood.

  Ante esto, hay varias soluciones:

    * Hacer que el control de flood fuera mayor para ese instante 
(cuando se envia la lista de WATCH)
    * Hacer que el envio de la lista de WATCH no cuente para el control 
de flood.
    * Subir el CLIENT_FLOOD, para que se le pueda enviar esa cantidad y 
más aún, sin problemas. Es lo que han hecho en Dalnet.
    * Reducir la lista de WATCH, pues el mIRC sólo envia tantos nicks 
como tamaño tiene el WATCH (el resto, se pierden). Esto es un bug, pues 
así puedes estar pensando que haces el seguimiento a un nick, cuando en 
realidad no lo estás haciendo y el mIRC no te avisa de que la lista de 
WATCH del servidor es menor que el tamaño de tu notify.
    * Que el mIRC no envie la lista de WATCH de golpe, sino que haga una 
pequeña pausa en cada envio, para no flodear al server. Sobre este 
último problema, hize este post en el foro oficial del mIRC, en la 
sección de bugs:

"When connecting IRC, and WATCH list (128 nicks default size) is sent to 
the server, there are cases where the client (in this case, mIRC) gets 
disconnected due to excess flood. This is caused by mIRC when sending 
the WATCH list to server, and the size of that list is larger that the 
CLIENT_FLOOD constant defined in ircd sources (s_bsd.c), that controls 
the amount of bytes the client can send to server without being 
disconnected due to flood.

This issue can be "fixed" making the value of CLIENT_FLOOD larger, but I 
think this is a bug, and mIRC should send the WATCH list with a little 
delay between each WATCH +nick1 +nick2 etc command, to avoid flooding 
the server. "

    Y a esto, respondió el creador del mIRC, así:

"As you indicated, flood-checking is a server feature. Every IRC network 
has it's own criteria for what constitutes a flood, so an IRC client 
can't know how fast or slowly it should send messages.

I would say that the server must take account of the fact that different 
messages are used in different ways. WATCH is most often used to prepare 
the notify list when a client first connects to a server, so the server 
should be aware of this, eg. the server could allow a larger flood 
setting when a client first connects to the server."

¿Comentarios?

    Saludos,

NiKoLaS






More information about the IRC-Dev mailing list