diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2010-02-11 11:12:58 +0100 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2010-02-11 11:12:58 +0100 |
commit | 2af25a971a28ccac05d2385669e8b103c0328f7d (patch) | |
tree | c24af521f1f2581709a81b09c0e624c9983b8fcd /proto/bgp | |
parent | fa5a99c766dde2a4ac3d44596ff5396a0efd1cc8 (diff) | |
download | bird-2af25a971a28ccac05d2385669e8b103c0328f7d.tar bird-2af25a971a28ccac05d2385669e8b103c0328f7d.zip |
Fixes a crash caused by missing error hook on BGP listening socket.
Error happened when too many BGP connections arrived in one moment
(ECONNABORTED).
Diffstat (limited to 'proto/bgp')
-rw-r--r-- | proto/bgp/bgp.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 215dc81..f4cb112 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -55,6 +55,8 @@ #undef LOCAL_DEBUG +#include <errno.h> + #include "nest/bird.h" #include "nest/iface.h" #include "nest/protocol.h" @@ -614,6 +616,15 @@ bgp_incoming_connection(sock *sk, int dummy UNUSED) return 0; } +static void +bgp_listen_sock_err(sock *sk, int err) +{ + if (err == ECONNABORTED) + log(L_WARN "BGP: Incoming connection aborted"); + else + log(L_ERR "BGP: Error on incoming socket: %M", err); +} + static sock * bgp_setup_listen_sk(ip_addr addr, unsigned port, u32 flags) { @@ -627,9 +638,10 @@ bgp_setup_listen_sk(ip_addr addr, unsigned port, u32 flags) s->rbsize = BGP_RX_BUFFER_SIZE; s->tbsize = BGP_TX_BUFFER_SIZE; s->rx_hook = bgp_incoming_connection; + s->err_hook = bgp_listen_sock_err; if (sk_open(s)) { - log(L_ERR "Unable to open incoming BGP socket"); + log(L_ERR "BGP: Unable to open incoming socket"); rfree(s); return NULL; } |