> BUFSIZE is not to be increased on any IRC network unless all clients and
> servers agree on the new value. 512 is the value specified in RFC 1459.
> IRC servers that use a smaller value will drop parameters; IRC clients
> with a smaller value than their server could be crashed, depending on the
> degree of care that has gone into writing the client. (A well-written
> client should not crash, but what it will get and what it will display to
> the user are left unspecified--and not all coders pay attention to the
> "Be liberal in what you accept" rule.)
Thanks for the information. The software will be used in a
tightly controlled environment where we can define all
settings beforehand, so that compatibility to other software
is of less concern.
After crashing the server a couple of times, I have found
that increasing the send-/user-/servbuf-sizes in send.[ch]
from 2048 to 8192 seems to make it work. I'm not sure
whether dbuf.c's DBUF_SIZE needs to be increased as well.
Your guidance on this issue is appreciated.
I'm appending a patch for centralizing the sendbuffer-related
settings.
- Sascha Experience IRCG
http://schumann.cx/ http://schumann.cx/ircg
diff -ur ircu2.10/include/ircd_defs.h ircu2.10-ok/include/ircd_defs.h
--- ircu2.10/include/ircd_defs.h Tue Oct 2 14:57:23 2001
+++ ircu2.10-ok/include/ircd_defs.h Fri Nov 9 20:17:04 2001
@@ -105,6 +105,12 @@
*/
#define BUFSIZE 512 /* WARNING: *DONT* CHANGE THIS!!!! */
+/*
+ * SENDBUFSIZE must be large enough to contain all messages which are
+ * sent to clients and servers.
+ */
+#define SENDBUFSIZE 2048
+
#define MAXTARGETS 20
#define STARTTARGETS 10
#define RESERVEDTARGETS 12
diff -ur ircu2.10/include/send.h ircu2.10-ok/include/send.h
--- ircu2.10/include/send.h Wed Aug 29 22:01:08 2001
+++ ircu2.10-ok/include/send.h Fri Nov 9 20:18:12 2001
@@ -62,6 +62,8 @@
extern void sendbufto_op_mask(unsigned int mask);
extern void sendbufto_serv_butone(struct Client *one);
-extern char sendbuf[2048];
+#include "ircd_defs.h"
+
+extern char sendbuf[SENDBUFSIZE];
#endif /* INCLUDED_send_h */
diff -ur ircu2.10/ircd/s_bsd.c ircu2.10-ok/ircd/s_bsd.c
--- ircu2.10/ircd/s_bsd.c Sun Jun 10 00:45:37 2001
+++ ircu2.10-ok/ircd/s_bsd.c Fri Nov 9 19:10:30 2001
@@ -717,7 +717,7 @@
* -avalon
*/
if (0 == dolen) {
- if (DBufLength(&cptr->recvQ) < 510)
+ if (DBufLength(&cptr->recvQ) < BUFSIZE - 2)
cptr->flags |= FLAGS_NONL;
else
DBufClear(&cptr->recvQ);
diff -ur ircu2.10/ircd/send.c ircu2.10-ok/ircd/send.c
--- ircu2.10/ircd/send.c Wed Aug 29 22:01:20 2001
+++ ircu2.10-ok/ircd/send.c Fri Nov 9 20:15:59 2001
@@ -42,13 +42,13 @@
#include <string.h>
-char sendbuf[2048];
+char sendbuf[SENDBUFSIZE];
static int sentalong[MAXCONNECTIONS];
static int sentalong_marker;
struct SLink *opsarray[32]; /* don't use highest bit unless you change
atoi to strtoul in sendto_op_mask() */
#ifdef GODMODE
-char sendbuf2[2048];
+char sendbuf2[SENDBUFSIZE];
int sdbflag;
#endif /* GODMODE */
@@ -239,8 +239,8 @@
len = strlen(buf);
if (buf[len - 1] != '\n') {
- if (len > 510)
- len = 510;
+ if (len > BUFSIZE - 2)
+ len = BUFSIZE - 2;
buf[len++] = '\r';
buf[len++] = '\n';
buf[len] = '\0';
@@ -367,8 +367,8 @@
*/
struct Membership* member;
struct Client *acptr;
- char userbuf[2048];
- char servbuf[2048];
+ char userbuf[SENDBUFSIZE];
+ char servbuf[SENDBUFSIZE];
int i;
int flag=-1;