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:
parent
2430fc7c17
commit
b65d6dc315
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user