serversocket.setblocking(0) epoll = select.epoll() epoll.register(serversocket.fileno(),select.EPOLLIN|select.EPOLLET) def read(fileno,datalist): recv_result = '' try: while True: recv_result += connections[fileno].recv(1024) except socket.error, msg: pass datalist[fileno] = recv_result#把接收到结果赋给该事件 recv_pack = struct.unpack('ii64s',datalist[fileno]) if recv_pack[1] == 10: check = hash.get_info(recv_pack[2].replace('\0','').strip())#把空字符转换成空格,再去掉空格 if check != None: check_rel = check.split('\\') tem = [] for val in check_rel: tem.append(struct.pack('32s',val))#把每个返回结果都打包成32个字节 send_val = ''.join(tem)#把列表整合成字符串 backmsg[fileno] = struct.pack('ii224s',232,11,send_val) epoll.modify(fileno, select.EPOLLOUT | select.EPOLLET) else: backmsg[fileno] = struct.pack('ii224s',8,11,'\0') epoll.modify(fileno, select.EPOLLOUT | select.EPOLLET) elif recv_pack[1]==9: hash.update_hashtable('Telephone', 'root', 'IceFlow2012') epoll.unregister(fileno)
def select(self, info): result = hash.get_info(info) return result
connections[connection.fileno()] = connection addresses[connection.fileno()] = address datalist[connection.fileno()] = '' except socket.error: pass elif event & select.EPOLLIN: #系统内的事件比较 做与运算 recv_result = '' try: while True: recv_result += connections[fileno].recv(1024) except socket.error, msg: pass datalist[fileno] = recv_result #把接收到结果赋给该事件 recv_pack = struct.unpack('ii64s', datalist[fileno]) if recv_pack[1] == 10: check = hash.get_info(recv_pack[2].replace( '\0', '').strip()) #把空字符转换成空格,再去掉空格 if check != None: check_rel = check.split('\\') tem = [] for val in check_rel: tem.append(struct.pack('32s', val)) #把每个返回结果都打包成32个字节 send_val = ''.join(tem) #把列表整合成字符串 backmsg[fileno] = struct.pack('ii224s', 232, 11, send_val) epoll.modify(fileno, select.EPOLLOUT | select.EPOLLET) else: backmsg[fileno] = struct.pack('ii224s', 8, 11, '\0') epoll.modify(fileno, select.EPOLLOUT | select.EPOLLET) elif recv_pack[1] == 9: hash.update_hashtable('Telephone', 'root', 'IceFlow2012')
def select(self,info): result = hash.get_info(info) return result