diff options
| author | Renato Westphal <renato@opensourcerouting.org> | 2016-12-07 13:21:46 -0200 | 
|---|---|---|
| committer | David Lamparter <equinox@opensourcerouting.org> | 2016-12-08 12:50:25 +0100 | 
| commit | 6228a3b8743ea2a6589070de926588e2ceb0f27f (patch) | |
| tree | 1d4f333086f14d333c2aae31b1c01a27e55e8b0b /ospfd/ospf_network.c | |
| parent | de587d745e3b8b75cf92b2bff78af370adddb39f (diff) | |
*: always set SO_SNDBUF and SO_RCVBUF using a best effort approach
If we fail to set any socket's buffer size, try again with a smaller value
and keep going until it succeeds. This is better than just giving up or,
even worse, abort the creation of a socket (ospf6d and ripd).
Fix broken ospf6d on FreeBSD.
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'ospfd/ospf_network.c')
| -rw-r--r-- | ospfd/ospf_network.c | 36 | 
1 files changed, 2 insertions, 34 deletions
diff --git a/ospfd/ospf_network.c b/ospfd/ospf_network.c index f02fcd14ac..d7ec256214 100644 --- a/ospfd/ospf_network.c +++ b/ospfd/ospf_network.c @@ -161,8 +161,6 @@ ospf_sock_init (void)    int ospf_sock;    int ret, hincl = 1;    int bufsize = (8 * 1024 * 1024); -  int optval; -  socklen_t optlen = sizeof(optval);    if ( ospfd_privs.change (ZPRIVS_RAISE) )      zlog_err ("ospf_sock_init: could not raise privs, %s", @@ -222,38 +220,8 @@ ospf_sock_init (void)                 safe_strerror (errno) );      } -  if ((ret = setsockopt (ospf_sock, SOL_SOCKET, SO_RCVBUF, -			 &bufsize, sizeof (bufsize))) < 0) -    { -      zlog_err ("Couldn't increase raw rbuf size: %s\n", safe_strerror(errno)); -    } - -  if ((ret = getsockopt (ospf_sock, SOL_SOCKET, SO_RCVBUF, -			 &optval, &optlen)) < 0) -    { -      zlog_err("getsockopt of SO_RCVBUF failed with error %s\n", safe_strerror(errno)); -    } -  if (optval < bufsize) -    { -      zlog_err("Unable to SO_RCVBUF to %d, set to %d\n", bufsize, optval); -    } - +  setsockopt_so_sendbuf (ospf_sock, bufsize); +  setsockopt_so_recvbuf (ospf_sock, bufsize); -  if ((ret = setsockopt (ospf_sock, SOL_SOCKET, SO_SNDBUF, -			 &bufsize, sizeof (bufsize))) < 0) -    { -      zlog_err ("Couldn't increase raw wbuf size: %s\n", safe_strerror(errno)); -    } - -  if ((ret = getsockopt (ospf_sock, SOL_SOCKET, SO_SNDBUF, -			 &optval, &optlen)) < 0) -    { -      zlog_err ("getsockopt of SO_SNDBUF failed with error %s\n", safe_strerror(errno)); -    } -  if (optval < bufsize) -    { -      zlog_err ("Unable to SO_SNDBUF to %d, set to %d\n", bufsize, optval); -    } -     return ospf_sock;  }  | 
