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 | |
parent | fa5a99c766dde2a4ac3d44596ff5396a0efd1cc8 (diff) |
Fixes a crash caused by missing error hook on BGP listening socket.
Error happened when too many BGP connections arrived in one moment
(ECONNABORTED).
-rw-r--r-- | proto/bgp/bgp.c | 14 | ||||
-rw-r--r-- | sysdep/unix/io.c | 1 |
2 files changed, 13 insertions, 2 deletions
diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 215dc817..f4cb112a 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; } diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 296b6b3a..90b5b144 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -947,7 +947,6 @@ sk_passive_connected(sock *s, struct sockaddr *sa, int al, int type) } else if (errno != EINTR && errno != EAGAIN) { - log(L_ERR "accept: %m"); s->err_hook(s, errno); } return 0; |