[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