def update_channel(self, channel):
'''
??channel_map,??????kevent_lst
'''
import select
if not channel:
return
fd = channel._fd
if not fd in self.channel_map:
# ?????,?????
self.channel_count += 1
self.channel_map[fd] = channel
change_event_lst = []
# ???????,?????
if channel.need_read == True:
# ?????,?????????
kevent = select.kevent(channel._fd, filter=select.KQ_FILTER_READ,
flags=select.KQ_EV_ADD | select.KQ_EV_ENABLE)
change_event_lst.append(kevent)
else:
# ?????
kevent = select.kevent(channel._fd, filter=select.KQ_FILTER_READ, flags=select.KQ_EV_DELETE)
change_event_lst.append(kevent)
if channel.need_write == True:
# ?????,?????????
kevent = select.kevent(channel._fd, filter=select.KQ_FILTER_WRITE,
flags=select.KQ_EV_ADD | select.KQ_EV_ENABLE)
change_event_lst.append(kevent)
pass
else:
# ?????
kevent = select.kevent(channel._fd, filter=select.KQ_FILTER_WRITE, flags=select.KQ_EV_DELETE)
change_event_lst.append(kevent)
try:
self.kq.control(change_event_lst, len(change_event_lst), 0)
except select.error, err:
# ??kqueue??
raise Exception()
评论列表
文章目录