pyrad
pyrad copied to clipboard
`select.poll()` not supported on OSX
https://github.com/wichert/pyrad/blob/2d64523dcf1aedee672841b297570c37d291992b/example/server.py#L69
Traceback (most recent call last):
File "/venv/lib/python2.7/site-packages/pyrad/server.py", line 300, in Run
self._poll = select.poll()
AttributeError: 'module' object has no attribute 'poll'
This makes it impossible to develop on OSX :(
To make this work on OSX, I did the following (this wont work on Linux):
In server.py:
changed the Run method as follows:
def Run(self):
self._kq = select.kqueue()
self._fdmap = {}
self._PrepareSockets()
while True:
revents = self._kq.control([], 1, None)
for event in revents:
if event.filter == select.KQ_FILTER_READ:
try:
fd = event.ident
fdo = self._fdmap[fd]
self._ProcessInput(fdo)
except ServerPacketError as err:
logger.info('Dropping packet: ' + str(err))
except packet.PacketError as err:
logger.info('Received a broken packet: ' + str(err))
else:
logger.error('Unexpected event in server main loop')
changed the _PrepareSockets method as follows:
def _PrepareSockets(self):
"""Prepare all sockets to receive packets."""
for fd in self.authfds + self.acctfds + self.coafds:
self._fdmap[fd.fileno()] = fd
ev = select.kevent(fd.fileno(),
filter=select.KQ_FILTER_READ,
flags=select.KQ_EV_ADD | select.KQ_EV_ENABLE)
self._kq.control([ev], 0, 0)
if self.auth_enabled:
self._realauthfds = list(map(lambda x: x.fileno(), self.authfds))
if self.acct_enabled:
self._realacctfds = list(map(lambda x: x.fileno(), self.acctfds))
if self.coa_enabled:
self._realcoafds = list(map(lambda x: x.fileno(), self.coafds))