| 
						
						
							
								
							
						
						
					 | 
					@ -693,7 +693,7 @@ class TCPRelayHandler(object): | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    self._stage = STAGE_DNS | 
					 | 
					 | 
					                    self._stage = STAGE_DNS | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    self._dns_resolver.resolve(remote_addr, | 
					 | 
					 | 
					                    self._dns_resolver.resolve(remote_addr, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                                               self._handle_dns_resolved) | 
					 | 
					 | 
					                                               self._handle_dns_resolved) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    logging.info('TCP connect %s:%d from %s:%d' % (remote_addr, remote_port, addr[0], addr[1])) | 
					 | 
					 | 
					                    logging.info('TCPonUDP connect %s:%d from %s:%d' % (remote_addr, remote_port, addr[0], addr[1])) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                else: | 
					 | 
					 | 
					                else: | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    # ileagal request | 
					 | 
					 | 
					                    # ileagal request | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                    rsp_data = self._pack_rsp_data(CMD_DISCONNECT, RSP_STATE_EMPTY) | 
					 | 
					 | 
					                    rsp_data = self._pack_rsp_data(CMD_DISCONNECT, RSP_STATE_EMPTY) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -882,8 +882,7 @@ class UDPRelay(object): | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        self._is_local = is_local | 
					 | 
					 | 
					        self._is_local = is_local | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        self._cache = lru_cache.LRUCache(timeout=config['timeout'], | 
					 | 
					 | 
					        self._cache = lru_cache.LRUCache(timeout=config['timeout'], | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                                         close_callback=self._close_client) | 
					 | 
					 | 
					                                         close_callback=self._close_client) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        self._client_fd_to_server_addr = \ | 
					 | 
					 | 
					        self._client_fd_to_server_addr = {} | 
				
			
			
				
				
			
		
	
		
		
			
				
					 | 
					 | 
					            lru_cache.LRUCache(timeout=config['timeout']) | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        self._dns_cache = lru_cache.LRUCache(timeout=300) | 
					 | 
					 | 
					        self._dns_cache = lru_cache.LRUCache(timeout=300) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        self._eventloop = None | 
					 | 
					 | 
					        self._eventloop = None | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        self._closed = False | 
					 | 
					 | 
					        self._closed = False | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -945,6 +944,7 @@ class UDPRelay(object): | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        if hasattr(client, 'close'): | 
					 | 
					 | 
					        if hasattr(client, 'close'): | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            self._sockets.remove(client.fileno()) | 
					 | 
					 | 
					            self._sockets.remove(client.fileno()) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            self._eventloop.remove(client) | 
					 | 
					 | 
					            self._eventloop.remove(client) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            del self._client_fd_to_server_addr[client.fileno()] | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            client.close() | 
					 | 
					 | 
					            client.close() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        else: | 
					 | 
					 | 
					        else: | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            # just an address | 
					 | 
					 | 
					            # just an address | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -1330,15 +1330,14 @@ class UDPRelay(object): | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            if self._server_socket: | 
					 | 
					 | 
					            if self._server_socket: | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                self._server_socket.close() | 
					 | 
					 | 
					                self._server_socket.close() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                self._server_socket = None | 
					 | 
					 | 
					                self._server_socket = None | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                for sock in self._sockets: | 
					 | 
					 | 
					                #for sock in self._sockets: | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                    sock.close() | 
					 | 
					 | 
					                #    sock.close() | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                logging.info('closed UDP port %d', self._listen_port) | 
					 | 
					 | 
					                logging.info('closed UDP port %d', self._listen_port) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        before_sweep_size = len(self._sockets) | 
					 | 
					 | 
					        before_sweep_size = len(self._sockets) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        self._cache.sweep() | 
					 | 
					 | 
					        self._cache.sweep() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        self._dns_cache.sweep() | 
					 | 
					 | 
					        self._dns_cache.sweep() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        if before_sweep_size != len(self._sockets): | 
					 | 
					 | 
					        if before_sweep_size != len(self._sockets): | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            logging.debug('UDP port %5d sockets %d' % (self._listen_port, len(self._sockets))) | 
					 | 
					 | 
					            logging.debug('UDP port %5d sockets %d' % (self._listen_port, len(self._sockets))) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        self._client_fd_to_server_addr.sweep() | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        self._sweep_timeout() | 
					 | 
					 | 
					        self._sweep_timeout() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    def close(self, next_tick=False): | 
					 | 
					 | 
					    def close(self, next_tick=False): | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					
  |