diff --git a/server/fsm.go b/server/fsm.go
index <HASH>..<HASH> 100644
--- a/server/fsm.go
+++ b/server/fsm.go
@@ -541,8 +541,12 @@ func (h *FSMHandler) recvMessageWithError() error {
 				if len(h.holdTimerResetCh) == 0 {
 					h.holdTimerResetCh <- true
 				}
+				if m.Header.Type == bgp.BGP_MSG_KEEPALIVE {
+					return nil
+				}
 			case bgp.BGP_MSG_NOTIFICATION:
 				h.reason = "Notification received"
+				return nil
 			}
 		}
 	}
server: don't put keepalive & notification to incoming ch

these msgs are garbage for server's main loop and just wasting channel
buffer.