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 <ishida.wataru@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
ISHIDA Wataru 2014-05-06 09:10:26 +00:00 committed by FUJITA Tomonori
parent 2430fc7c17
commit b65d6dc315

View File

@ -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)