2
0
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:
JINMEI Tatuya
2013-01-30 19:56:27 -08:00
parent 73ca6b06d1
commit 4df7916901

View File

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