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 <[email protected]> --- 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 a0e2ae5..dc828d1 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) -- 1.7.9.5 ------------------------------------------------------------------------------ Is your legacy SCM system holding you back? Join Perforce May 7 to find out: • 3 signs your SCM is hindering your productivity • Requirements for releasing software faster • Expert tips and advice for migrating your SCM now http://p.sf.net/sfu/perforce _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
