From: mdw Date: Sat, 3 Mar 2001 11:15:19 +0000 (+0000) Subject: Set the socket send and receive buffers to maximum. At least this way, X-Git-Tag: 1.0.0pre1~3 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/commitdiff_plain/0a9920e2dbc0891b418eed3366b59bb65c21c88c Set the socket send and receive buffers to maximum. At least this way, we won't drop large packets on the floor. If the administrator wants to prevent fragmentation of TrIPE messages, he can lower the MTU on the tunnel interface. Getting path-MTU stuff out of the kernel is too much system-specific hard work for this program. --- diff --git a/peer.c b/peer.c index 2f3d09ab..f60f887f 100644 --- a/peer.c +++ b/peer.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: peer.c,v 1.4 2001/02/16 21:40:24 mdw Exp $ + * $Id: peer.c,v 1.5 2001/03/03 11:15:19 mdw Exp $ * * Communication with the peer * @@ -29,6 +29,13 @@ /*----- Revision history --------------------------------------------------* * * $Log: peer.c,v $ + * Revision 1.5 2001/03/03 11:15:19 mdw + * Set the socket send and receive buffers to maximum. At least this way, + * we won't drop large packets on the floor. If the administrator wants to + * prevent fragmentation of TrIPE messages, he can lower the MTU on the + * tunnel interface. Getting path-MTU stuff out of the kernel is too much + * system-specific hard work for this program. + * * Revision 1.4 2001/02/16 21:40:24 mdw * Change key exchange message interface. Maintain statistics. * @@ -273,6 +280,15 @@ void p_init(unsigned port) { int fd; struct sockaddr_in sin; + int len = 65536; + + /* --- Note on socket buffer sizes --- * + * + * For some bizarre reason, Linux 2.2 (at least) doubles the socket buffer + * sizes I pass to @setsockopt@. I'm not putting special-case code here + * for Linux: BSD (at least TCPv2) does what I tell it rather than second- + * guessing me. + */ if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) die(EXIT_FAILURE, "socket creation failed: %s", strerror(errno)); @@ -282,6 +298,11 @@ void p_init(unsigned port) sin.sin_port = htons(port); if (bind(fd, (struct sockaddr *)&sin, sizeof(sin))) die(EXIT_FAILURE, "bind failed: %s", strerror(errno)); + if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &len, sizeof(len)) || + setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &len, sizeof(len))) { + die(EXIT_FAILURE, "failed to set socket buffer sizes: %s", + strerror(errno)); + } fdflags(fd, O_NONBLOCK, O_NONBLOCK, FD_CLOEXEC, FD_CLOEXEC); sel_initfile(&sel, &sock, fd, SEL_READ, p_read, 0); sel_addfile(&sock);