Hi,
With the new large socket buffer sizes, syslogd could use more mbufs
for TCP or TLS connections than before. It makes no sense to buffer
messages in kernel, the dynamic limit there makes testing the dropped
message statistics unreliable. Syslog has no high performance
requirements, so limit all TCP socket buffers to 64 KB.
ok?
bluhm
Index: syslogd.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/syslogd/syslogd.c,v
retrieving revision 1.213
diff -u -p -r1.213 syslogd.c
--- syslogd.c 21 Sep 2016 11:54:57 -0000 1.213
+++ syslogd.c 21 Sep 2016 23:22:08 -0000
@@ -343,6 +343,7 @@ int socket_bind(const char *, const char
int *, int *);
int unix_socket(char *, int, mode_t);
void double_sockbuf(int, int);
+void set_sockbuf(int);
void tailify_replytext(char *, int);
int
@@ -886,6 +887,10 @@ socket_bind(const char *proto, const cha
*fdp = -1;
continue;
}
+ if (!shutread && res->ai_protocol == IPPROTO_UDP)
+ double_sockbuf(*fdp, SO_RCVBUF);
+ else if (res->ai_protocol == IPPROTO_TCP)
+ set_sockbuf(*fdp);
reuseaddr = 1;
if (setsockopt(*fdp, SOL_SOCKET, SO_REUSEADDR, &reuseaddr,
sizeof(reuseaddr)) == -1) {
@@ -916,8 +921,6 @@ socket_bind(const char *proto, const cha
*fdp = -1;
continue;
}
- if (!shutread && res->ai_protocol == IPPROTO_UDP)
- double_sockbuf(*fdp, SO_RCVBUF);
}
freeaddrinfo(res0);
@@ -1257,6 +1260,7 @@ tcp_socket(struct filed *f)
logerror(ebuf);
return (-1);
}
+ set_sockbuf(s);
if (connect(s, (struct sockaddr *)&f->f_un.f_forw.f_addr,
f->f_un.f_forw.f_addr.ss_len) == -1 && errno != EINPROGRESS) {
snprintf(ebuf, sizeof(ebuf), "connect \"%s\"",
@@ -2909,6 +2913,17 @@ double_sockbuf(int fd, int optname)
if (setsockopt(fd, SOL_SOCKET, optname, &newsize, len) == -1)
logerror("setsockopt bufsize");
}
+}
+
+void
+set_sockbuf(int fd)
+{
+ int size = 65536;
+
+ if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)) == -1)
+ logerror("setsockopt sndbufsize");
+ if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)) == -1)
+ logerror("setsockopt rcvbufsize");
}
void