]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixes a crash caused by missing error hook on BGP listening socket.
authorOndrej Zajicek <santiago@crfreenet.org>
Thu, 11 Feb 2010 10:12:58 +0000 (11:12 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Thu, 11 Feb 2010 10:12:58 +0000 (11:12 +0100)
Error happened when too many BGP connections arrived in one moment
(ECONNABORTED).

proto/bgp/bgp.c
sysdep/unix/io.c

index 215dc817e3f5b17c9972323e3c6ab120d9b6a38c..f4cb112a705bf44a69e28a340ba19d92b4f7252c 100644 (file)
@@ -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;
     }
index 296b6b3ae64606a14371fd6bec57b4ae3af82901..90b5b14484e800d74c8ac0a56bc38d4a3d68ffae 100644 (file)
@@ -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;