|  | @@ -2623,8 +2623,8 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (rh.command == RELAY_COMMAND_BEGIN_DIR) {
 | 
	
		
			
				|  |  |      tor_assert(or_circ);
 | 
	
		
			
				|  |  | -    if (or_circ->p_conn && !tor_addr_is_null(&or_circ->p_conn->_base.addr))
 | 
	
		
			
				|  |  | -      tor_addr_assign(&n_stream->_base.addr, &or_circ->p_conn->_base.addr);
 | 
	
		
			
				|  |  | +    if (or_circ->p_conn && !tor_addr_is_null(&or_circ->p_conn->real_addr))
 | 
	
		
			
				|  |  | +      tor_addr_assign(&n_stream->_base.addr, &or_circ->p_conn->real_addr);
 | 
	
		
			
				|  |  |      return connection_exit_connect_dir(n_stream);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2798,7 +2798,7 @@ connection_exit_connect_dir(edge_connection_t *exitconn)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    dirconn->_base.addr = exitconn->_base.addr;
 | 
	
		
			
				|  |  |    dirconn->_base.port = 0;
 | 
	
		
			
				|  |  | -  dirconn->_base.address = tor_strdup(circ->p_conn->_base.address);
 | 
	
		
			
				|  |  | +  dirconn->_base.address = tor_strdup(exitconn->address);
 | 
	
		
			
				|  |  |    dirconn->_base.type = CONN_TYPE_DIR;
 | 
	
		
			
				|  |  |    dirconn->_base.purpose = DIR_PURPOSE_SERVER;
 | 
	
		
			
				|  |  |    dirconn->_base.state = DIR_CONN_STATE_SERVER_COMMAND_WAIT;
 |