def new_accept(orgin_method, self, *args, **kwds):
while True:
return_value = orgin_method(*args, **kwds)
self_socket = return_value[0]
client_ip, client_port = return_value[1][:2]
server_addrs = self._server_addrs
client_list = self._all_client_list.get(server_addrs, {})
if len(client_list) < self._limit_clients_num or client_ip in client_list:
self_socket._server_addrs = self._server_addrs
self_socket.close = self_socket.new_close
logging.debug("[socket] add client %s:%d" %(client_ip, client_port))
if client_list.get(client_ip, None) == None:
client_list.update({client_ip : {"client_num":0, "last_up_time":0}})
client_list[client_ip]["client_num"] += 1
self._all_client_list[server_addrs].update(client_list)
if set_close_timeout:
# set recv_timeout and send_timeout , struct.pack("II", some_num_secs, some_num_microsecs)
self_socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, struct.pack("II", recv_timeout, 0))
self_socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDTIMEO, struct.pack("II", send_timeout, 0))
return return_value
else:
for k,v in self._all_client_list[server_addrs].copy().items():
last_up_time = v["last_up_time"]
if time.time() - last_up_time > recvfrom_timeout and v["client_num"] < 1:
if set_close_timeout:
self_socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, struct.pack("II", recv_timeout, 0))
self_socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDTIMEO, struct.pack("II", send_timeout, 0))
logging.info("[socket] remove the client %s" % (k))
del client_list[k]
if client_list.get(client_ip, None) == None:
client_list.update({client_ip : {"client_num":0, "last_up_time":0}})
client_list[client_ip]["client_num"] += 1
self._all_client_list[server_addrs].update(client_list)
self_socket._server_addrs = self._server_addrs
self_socket.close = self_socket.new_close
return return_value
if time.time() - self.last_log_time[0] > 10:
logging.error("[socket] the server_addrs %s client more than %d" % (server_addrs, self._limit_clients_num))
self.last_log_time[0] = time.time()
self_socket.close()
# ??Udp??
评论列表
文章目录