forked from M-Labs/artiq
1
0
Fork 0

dashboard/moninj: fix windows problems

This commit is contained in:
Sebastien Bourdeauducq 2016-04-11 18:49:57 +08:00
parent d9e918be49
commit dbba41b042
1 changed files with 7 additions and 1 deletions

View File

@ -275,6 +275,7 @@ class MonInj(TaskObject):
self.subscriber = Subscriber("devices", self.init_devices) self.subscriber = Subscriber("devices", self.init_devices)
self.dm = None self.dm = None
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.socket.bind(("", 39284))
# Never ceasing to disappoint, asyncio has an issue about UDP # Never ceasing to disappoint, asyncio has an issue about UDP
# not being supported on Windows (ProactorEventLoop) open since 2014. # not being supported on Windows (ProactorEventLoop) open since 2014.
self.loop = asyncio.get_event_loop() self.loop = asyncio.get_event_loop()
@ -305,8 +306,13 @@ class MonInj(TaskObject):
def receiver_thread(self): def receiver_thread(self):
while True: while True:
data, addr = self.socket.recvfrom(2048) try:
data, addr = self.socket.recvfrom(2048)
except OSError:
# Windows does this when the socket is terminated
break
if addr is None: if addr is None:
# Linux does this when the socket is terminated
break break
self.loop.call_soon_threadsafe(self.datagram_received, data) self.loop.call_soon_threadsafe(self.datagram_received, data)