From b65d6dc315490507a4d5a99e8afb94535e4687f8 Mon Sep 17 00:00:00 2001 From: ISHIDA Wataru Date: Tue, 6 May 2014 09:10:26 +0000 Subject: bgp: fix bug of accessing dead socket BGP session can be closed by sending inappropriate messages. So touching socket by get_peername() after sending messages may cause an exception. Though we can handle this by try..exception, I fixed to simply call get_peername() before sending messages because session disconnection by sending messages is an ordinary procedure and not an exception(the peer will send notification before disconnection). Signed-off-by: ISHIDA Wataru Signed-off-by: FUJITA Tomonori --- ryu/services/protocols/bgp/speaker.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ryu/services/protocols/bgp/speaker.py b/ryu/services/protocols/bgp/speaker.py index a0e2ae57..dc828d18 100644 --- a/ryu/services/protocols/bgp/speaker.py +++ b/ryu/services/protocols/bgp/speaker.py @@ -371,15 +371,18 @@ class BgpProtocol(Protocol, Activity): raise BgpProtocolException('Tried to send message to peer when ' 'this protocol instance is not started' ' or is no longer is started state.') + # get peername before senging msg because sending msg can occur + # conncetion lost + peername = self.get_peername() self._socket.sendall(msg.serialize()) + if msg.type == BGP_MSG_NOTIFICATION: LOG.error('Sent notification to %s >> %s' % - (self.get_peername(), msg)) + (peername, msg)) self._signal_bus.bgp_notification_sent(self._peer, msg) - else: - LOG.debug('Sent msg to %s >> %s' % (self.get_peername(), msg)) + LOG.debug('Sent msg to %s >> %s' % (peername, msg)) def stop(self): Activity.stop(self) -- cgit v1.2.3