mirror of
https://github.com/faucetsdn/ryu.git
synced 2026-05-11 07:16:10 +02:00
rpc: If the socket is closed by peer, endpoint stop the serve.
If client does socket.close() the serve will be non-wait looping. So must stop the serve of endpoint that received 0 byte packet. Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
03ac8742f4
commit
e8962c296e
@ -115,6 +115,7 @@ class EndPoint(object):
|
||||
self._notifications = deque()
|
||||
self._responses = {}
|
||||
self._incoming = 0 # number of incoming messages in our queues
|
||||
self.closed_by_peer = False
|
||||
|
||||
def selectable(self):
|
||||
rlist = [self._sock]
|
||||
@ -142,7 +143,7 @@ class EndPoint(object):
|
||||
select.select(rlist, wlist, rlist + wlist)
|
||||
|
||||
def serve(self):
|
||||
while True:
|
||||
while not self.closed_by_peer:
|
||||
self.block()
|
||||
self.process()
|
||||
|
||||
@ -182,6 +183,9 @@ class EndPoint(object):
|
||||
except IOError:
|
||||
packet = None
|
||||
if not packet:
|
||||
if packet is not None:
|
||||
# socket closed by peer
|
||||
self.closed_by_peer = True
|
||||
break
|
||||
self._encoder.get_and_dispatch_messages(packet, self._table)
|
||||
return self._incoming > 0
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user