mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-03 23:45:27 +00:00
[2617] internal refactoring: extract FD handling into a separate method.
This commit is contained in:
@@ -497,7 +497,7 @@ class MsgQ:
|
|||||||
last_sent = now
|
last_sent = now
|
||||||
if self.poller:
|
if self.poller:
|
||||||
self.poller.register(fileno, select.POLLIN |
|
self.poller.register(fileno, select.POLLIN |
|
||||||
select.POLLOUT)
|
select.POLLOUT)
|
||||||
else:
|
else:
|
||||||
self.add_kqueue_socket(sock, True)
|
self.add_kqueue_socket(sock, True)
|
||||||
self.sendbuffs[fileno] = (last_sent, buff)
|
self.sendbuffs[fileno] = (last_sent, buff)
|
||||||
@@ -600,12 +600,11 @@ class MsgQ:
|
|||||||
self.running = False
|
self.running = False
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
if event & select.POLLOUT:
|
writable = event & select.POLLOUT
|
||||||
self.__process_write(fd)
|
readable = not writable and (event & select.POLLIN)
|
||||||
elif event & select.POLLIN:
|
if not writable and not readable:
|
||||||
self.process_socket(fd)
|
|
||||||
else:
|
|
||||||
logger.error(MSGQ_POLL_UNKNOWN_EVENT, fd, event)
|
logger.error(MSGQ_POLL_UNKNOWN_EVENT, fd, event)
|
||||||
|
self._process_fd(fd, writable, readable, False)
|
||||||
|
|
||||||
def run_kqueue(self):
|
def run_kqueue(self):
|
||||||
while self.running:
|
while self.running:
|
||||||
@@ -624,14 +623,28 @@ class MsgQ:
|
|||||||
self.running = False
|
self.running = False
|
||||||
break;
|
break;
|
||||||
else:
|
else:
|
||||||
if event.filter == select.KQ_FILTER_WRITE:
|
fd = event.ident
|
||||||
self.__process_write(event.ident)
|
writable = event.filter == select.KQ_FILTER_WRITE
|
||||||
if event.filter == select.KQ_FILTER_READ and \
|
readable = (event.filter == select.KQ_FILTER_READ and
|
||||||
event.data > 0:
|
event.data > 0)
|
||||||
self.process_socket(event.ident)
|
closed = (not readable and
|
||||||
elif event.flags & select.KQ_EV_EOF:
|
(event.flags & select.KQ_EV_EOF))
|
||||||
self.kill_socket(event.ident,
|
self._process_fd(fd, writable, readable, closed)
|
||||||
self.sockets[event.ident])
|
|
||||||
|
def _process_fd(self, fd, writable, readable, closed):
|
||||||
|
'''Process a single FD: unified subroutine of run_kqueue/poller.
|
||||||
|
|
||||||
|
closed can be True only in the case of kqueue. This is essentially
|
||||||
|
private but is defined as if it were "protected" so it's callable
|
||||||
|
from tests.
|
||||||
|
|
||||||
|
'''
|
||||||
|
if writable:
|
||||||
|
self.__process_write(fd)
|
||||||
|
if readable:
|
||||||
|
self.process_socket(fd)
|
||||||
|
if closed:
|
||||||
|
self.kill_socket(fd, self.sockets[fd])
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
# Signal it should terminate.
|
# Signal it should terminate.
|
||||||
|
Reference in New Issue
Block a user