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:
&#149; 3 signs your SCM is hindering your productivity
&#149; Requirements for releasing software faster
&#149; 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

Reply via email to